MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perbarui Banyak jika ada, jika tidak buat untuk setiap LeadId yang tidak ada Dokumen baru

Dari kueri Anda, karena Anda melakukan .updateMany() , Anda tidak perlu melakukan { multi: true } . Pokoknya biasanya kamu bisa melakukan upsert menggunakan {upset: true} , tetapi idealnya akan membuat dokumen baru berdasarkan kriteria filter dengan bidang pembaruan dari kueri input hanya jika tidak ada kecocokan yang ditemukan di DB. Tapi karena di sini kita punya daftar ($in ) dalam kriteria filter mungkin tidak berfungsi secara normal, coba ini :

let winnerLeads = [1, 2, 3, 31, 5]
let groupTarget = 1
let howManyClaims = 2
let bulkArr = []
for (i of winnerLeads) {
    bulkArr.push({
        updateOne: {
            "filter": {
                LeadId: i,
                TargetedToBeClaimedByClientType: groupTarget
            },
            // If you wanted it to be incremented rather than replace the field, then try `$inc` instead of `$set`.
            "update": { $set: { TotalClaimsToBeClaimedByClientType: howManyClaims } },
            "upsert": true
        }
    })
}
db.EightWeekGamePlan.bulkWrite(bulkArr);

Data Koleksi :

/* 1 */
{
    "_id" : ObjectId("5e06eb8f400289966e00fac2"),
    "LeadId" : 1,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e06eb98400289966e00fb88"),
    "LeadId" : 2,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 3 */
{
    "_id" : ObjectId("5e06eba0400289966e00fc47"),
    "LeadId" : 3,
    "TotalClaimsToBeClaimedByClientType" : 0,
    "TargetedToBeClaimedByClientType" : 11
}

/* 4 */
{
    "_id" : ObjectId("5e06ebac400289966e00fd4b"),
    "LeadId" : 4,
    "TotalClaimsToBeClaimedByClientType" : 1,
    "TargetedToBeClaimedByClientType" : 11
}

/* 5 */
{
    "_id" : ObjectId("5e06ecef400289966e01273a"),
    "LeadId" : 5,
    "TotalClaimsToBeClaimedByClientType" : 1.0,
    "TargetedToBeClaimedByClientType" : 1
}

Hasil :

/* 1 */
{
    "_id" : ObjectId("5e06eb8f400289966e00fac2"),
    "LeadId" : 1,
    "TotalClaimsToBeClaimedByClientType" : 2.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e06eb98400289966e00fb88"),
    "LeadId" : 2,
    "TotalClaimsToBeClaimedByClientType" : 2.0,
    "TargetedToBeClaimedByClientType" : 1
}

/* 3 */
{
    "_id" : ObjectId("5e06eba0400289966e00fc47"),
    "LeadId" : 3,
    "TotalClaimsToBeClaimedByClientType" : 0,
    "TargetedToBeClaimedByClientType" : 11
}

/* 4 */
{
    "_id" : ObjectId("5e06ebac400289966e00fd4b"),
    "LeadId" : 4,
    "TotalClaimsToBeClaimedByClientType" : 1,
    "TargetedToBeClaimedByClientType" : 11
}

/* 5 */
{
    "_id" : ObjectId("5e06ecef400289966e01273a"),
    "LeadId" : 5,
    "TotalClaimsToBeClaimedByClientType" : 2,
    "TargetedToBeClaimedByClientType" : 1
}

/* 6 */
{
    "_id" : ObjectId("5e071eb1400289966e0597a0"),
    "TargetedToBeClaimedByClientType" : 1.0,
    "LeadId" : 3.0,
    "TotalClaimsToBeClaimedByClientType" : 2.0
}

/* 7 */
{
    "_id" : ObjectId("5e071e62400289966e059168"),
    "TargetedToBeClaimedByClientType" : 1.0,
    "LeadId" : 31.0,
    "TotalClaimsToBeClaimedByClientType" : 2.0
}

Pada dasarnya bulkWrite tidak mengembalikan dokumen apa pun kecuali hasil tulis, Anda dapat memverifikasi di DB untuk hasil operasi pembaruan, Juga dari hasil di atas 6 dimasukkan sebagai LeadId : 3 + TargetedToBeClaimedByClientType" : 1.0 (Jadi LeadId:3 digandakan) kombinasi tidak ada dalam DB &7 dimasukkan sebagai LeadId : 31 tidak ada di DB, Sisa 1 ,2 ,5 TotalClaimsToBeClaimedByClientType telah diperbarui.

Ref : bulkWrite




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cluster MongoDB Berkinerja Tinggi di Azure

  2. nama bidang ClassName sedang dimasukkan ke dalam mongodb oleh morphia

  3. Karakter Spasi MongoDB

  4. Bagaimana cara menyusun string json ke dokumen bson untuk menulis ke MongoDB?

  5. Mongodb - duplikat bidang di $set dan $setOnInsert