MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कई अपडेट करें यदि मौजूद है, अन्यथा प्रत्येक लीड के लिए बनाएं जो मौजूद नहीं है एक नया दस्तावेज़

आपकी क्वेरी से, चूंकि आप .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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं $match, $lookup और $filter का उपयोग करते हुए, Mongodb एकत्रीकरण से केवल कुछ फ़ील्ड ($ प्रोजेक्ट) कैसे वापस कर सकता हूं

  2. प्रकार के लिए कोई गुण मौजूद नहीं है... MongoDB और स्प्रिंग-डेटा के साथ QueryDslPredicateExecutor का उपयोग करते समय

  3. स्प्रिंग बूट पर एक्सॉन फ्रेमवर्क के लिए मोंगो एक्सटेंशन की स्थापना

  4. mongoengine - स्कीमा सत्यापन के लिए अतिरिक्त क्षेत्रों पर ध्यान न दें

  5. विंडोज 8.1 पर मोंगोडीबी को सेवा के रूप में कैसे स्थापित करें