Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में एकाधिक दस्तावेज़ अपसर्ट करना

MongoDB में अनऑर्डर्ड बल्क ऑपरेशन का उपयोग करके एकाधिक दस्तावेज़ अपसर्ट करना

MongoDB में initializeUnorderedBulkOp() के साथ बल्क ऑपरेशन का उपयोग करके एकाधिक दस्तावेज़ों पर अपसर्ट करें। नोट: यह पुराना API है; आधुनिक संस्करणों में bulkWrite() का उपयोग करें।

उदाहरण: संग्रह और दस्तावेज़ बनाना

> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee4fbbc41e36cc3cae6c") }
> db.demo425.insertOne({"Name":"David","Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee56bbc41e36cc3cae6d") }
> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee57bbc41e36cc3cae6e") }
> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee5cbbc41e36cc3cae6f") }

सभी दस्तावेज़ देखना

> db.demo425.find();

आउटपुट:

{ "_id" : ObjectId("5e74ee4fbbc41e36cc3cae6c"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e74ee56bbc41e36cc3cae6d"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e74ee57bbc41e36cc3cae6e"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e74ee5cbbc41e36cc3cae6f"), "Name" : "Chris", "Age" : 21 }

पुराने बल्क API से अपसर्ट (Name: "Chris" वाले सभी को अपडेट)

> var b1 = db.demo425.initializeUnorderedBulkOp();
> b1.find( { Name: "Chris" } ).upsert().update(
  {
    $setOnInsert: { id:101 },
    $set: { Name: "Robert", Age:23 }
  }
);
> b1.execute();
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 3, "nModified" : 3, "nRemoved" : 0, "upserted" : [ ] })

अपडेट के बाद दस्तावेज़ देखना

> db.demo425.find();

आउटपुट:

{ "_id" : ObjectId("5e74ee4fbbc41e36cc3cae6c"), "Name" : "Robert", "Age" : 23 }
{ "_id" : ObjectId("5e74ee56bbc41e36cc3cae6d"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e74ee57bbc41e36cc3cae6e"), "Name" : "Robert", "Age" : 23 }
{ "_id" : ObjectId("5e74ee5cbbc41e36cc3cae6f"), "Name" : "Robert", "Age" : 23 }

व्याख्या:

  • find({Name: "Chris"}) - फिल्टर कंडीशन
  • .upsert() - अपसर्ट मोड सक्षम (नहीं मिले तो इन्सर्ट)
  • $setOnInsert - केवल इन्सर्ट होने पर सेट होता है (मौजूदा पर नहीं)
  • $set - हमेशा सेट होता है (मौजूदा दस्तावेज़ अपडेट करता है)
  • चूंकि 3 दस्तावेज़ मिले, सभी अपडेट हुए, कोई इन्सर्ट नहीं

आधुनिक bulkWrite() समतुल्य:

db.demo425.bulkWrite([
  {
    updateMany: {
      filter: { Name: "Chris" },
      update: { 
        $set: { Name: "Robert", Age: 23 },
        $setOnInsert: { id: 101 }
      },
      upsert: true
    }
  }
], { ordered: false })

लाभ: बल्क ऑपरेशन नेटवर्क राउंड-ट्रिप कम करते हैं और एटॉमिकिटी विकल्प देते हैं।

  1. - MongoDB में सब-डॉक्यूमेंट द्वारा सब-डॉक्यूमेंट्स फ़िल्टर करें

    इसके लिए, $unwind के साथ aggregate() का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo583.insert([ { details1: [ { details2: [ { isMarried: true, Name: Chris }, { isMarried: true, Name: Bob }

  1. - MongoDB दस्तावेज़ों में नल वैल्यूज़ को अनदेखा करना

    ऐरे में null वैल्यूज़ को बाहर करने के लिए $ne: null के साथ $match का उपयोग करें। डेमो डेटा db.demo722.insertOne({ id:101, details: [ { Name: }, { Name: David }, { Name:null }, { Name:Carol } ] }); क्वेरी db.demo722.aggregate([ {$unwind: $details},

  1. - MongoDB में एक क्वेरी से कई डॉक्यूमेंट्स कैसे अपडेट करें?

    एक क्वेरी से कई डॉक्यूमेंट्स अपडेट करने के लिए MongoDB में bulkWrite() का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo760.insertOne({id:1,details:{Value1:100,Value2:50}}); { acknowledged : true, insertedId : ObjectId(5eb0309f5637cd592b2a4aee) } > db.demo760.insertOne({id:2,details:{Value1: