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