आपकी क्वेरी से, चूंकि आप .updateMany()
कर रहे हैं , आपको { multi: true }
. करने की ज़रूरत नहीं है . वैसे भी आमतौर पर आप {upset: true}
. का उपयोग करके अप्सर्ट कर सकते हैं , लेकिन यह आदर्श रूप से केवल इनपुट क्वेरी से अद्यतन फ़ील्ड के साथ फ़िल्टर मानदंड के आधार पर एक नया दस्तावेज़ तैयार करेगा यदि डीबी में कोई मिलान नहीं मिलता है। लेकिन यहां से हमारे पास एक सूची है ($in
) फ़िल्टर मानदंड में यह सामान्य रूप से काम नहीं कर सकता है, इसे आजमाएं:
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);
संग्रह डेटा:
/* 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
}
परिणाम:
/* 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
}
मूल रूप से बल्कवाइट लिखित परिणाम को छोड़कर किसी भी दस्तावेज़ को वापस नहीं करता है, आप अद्यतन ऑपरेशन परिणाम के लिए डीबी में सत्यापित कर सकते हैं, उपरोक्त परिणाम से भी 6
LeadId : 3 + TargetedToBeClaimedByClientType" : 1.0
के रूप में सम्मिलित किया गया (इसलिए LeadId:3
डुप्लीकेट है) संयोजन DB और 7
. में मौजूद नहीं है LeadId : 31
. के रूप में डाला गया डीबी में मौजूद नहीं है, शेष 1
,2
,5
का TotalClaimsToBeClaimedByClientType
अपडेट हो गया।
संदर्भ : bulkWrite