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

MongoDB में एक ही क्वेरी में मल्टीपल रो कैसे अपडेट करें?

MongoDB में initializeUnorderedBulkOp() का उपयोग करके बल्क अपडेट करना

initializeUnorderedBulkOp() (लिगेसी शेल मेथड) एक अनऑर्डर्ड बल्क ऑपरेशन बिल्डर बनाता है जो मल्टीपल अपडेट ऑपरेशन्स को एक ही नेटवर्क राउंड-ट्रिप में बैच करने की अनुमति देता है। आधुनिक MongoDB में, बल्क राइट्स के लिए bulkWrite() का उपयोग करें।

नमूना डेटा बनाना

> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"John","CustomerPurchaseAmount":500});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb06d78f205348bc626") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"Chris","CustomerPurchaseAmount":700});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb26d78f205348bc627") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"David","CustomerPurchaseAmount":50});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb36d78f205348bc628") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"Larry","CustomerPurchaseAmount":1900});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb46d78f205348bc629") }

सभी डॉक्यूमेंट्स देखना

> db.upDateMultipleRowsDemo.find().pretty();

आउटपुट:

{ "_id" : ObjectId("5cd6ceb06d78f205348bc626"), "CustomerName" : "John", "CustomerPurchaseAmount" : 500 }
{ "_id" : ObjectId("5cd6ceb26d78f205348bc627"), "CustomerName" : "Chris", "CustomerPurchaseAmount" : 700 }
{ "_id" : ObjectId("5cd6ceb36d78f205348bc628"), "CustomerName" : "David", "CustomerPurchaseAmount" : 50 }
{ "_id" : ObjectId("5cd6ceb46d78f205348bc629"), "CustomerName" : "Larry", "CustomerPurchaseAmount" : 1900 }

लिगेसी बल्क ऑप के साथ मल्टीपल अपडेट्स

> var manyUpdateValue = db.upDateMultipleRowsDemo.initializeUnorderedBulkOp();
> manyUpdateValue.find({ _id: ObjectId("5cd6ceb06d78f205348bc626") }).updateOne({ $set: { "CustomerName": "Bob" } });
> manyUpdateValue.find({ _id: ObjectId("5cd6ceb36d78f205348bc628") }).updateOne({ $set: { "CustomerPurchaseAmount": 56544444 } });
> manyUpdateValue.execute();
BulkWriteResult({
  "writeErrors" : [ ],
  "writeConcernErrors" : [ ],
  "nInserted" : 0,
  "nUpserted" : 0,
  "nMatched" : 2,
  "nModified" : 2,
  "nRemoved" : 0,
  "upserted" : [ ]
})

परिणाम वेरिफाई करना

> db.upDateMultipleRowsDemo.find().pretty();

आउटपुट:

{ "_id" : ObjectId("5cd6ceb06d78f205348bc626"), "CustomerName" : "Bob", "CustomerPurchaseAmount" : 500 }
{ "_id" : ObjectId("5cd6ceb26d78f205348bc627"), "CustomerName" : "Chris", "CustomerPurchaseAmount" : 700 }
{ "_id" : ObjectId("5cd6ceb36d78f205348bc628"), "CustomerName" : "David", "CustomerPurchaseAmount" : 56544444 }
{ "_id" : ObjectId("5cd6ceb46d78f205348bc629"), "CustomerName" : "Larry", "CustomerPurchaseAmount" : 1900 }

आधुनिक दृष्टिकोण: bulkWrite() (MongoDB 3.2+)

db.upDateMultipleRowsDemo.bulkWrite([
  { updateOne: {
    filter: { _id: ObjectId("5cd6ceb06d78f205348bc626") },
    update: { $set: { "CustomerName": "Bob" } }
  }},
  { updateOne: {
    filter: { _id: ObjectId("5cd6ceb36d78f205348bc628") },
    update: { $set: { "CustomerPurchaseAmount": 56544444 } }
  }}
]);

लाभ

  • कम नेटवर्क राउंड-ट्रिप्स - सभी ऑपरेशन्स एक बैच में भेजे जाते हैं।
  • अनऑर्डर्ड निष्पादन - ऑपरेशन्स समानांतर में निष्पादित हो सकते हैं (तेज़)।
  • ऑर्डर्ड विकल्प - initializeOrderedBulkOp() या bulkWrite([...], { ordered: true }) क्रमिक निष्पादन के लिए, पहली त्रुटि पर रुकता है।

मुख्य बिंदु

  • नए कोड के लिए bulkWrite() का उपयोग करें; initializeUnorderedBulkOp() लिगेसी है।
  • प्रति बैच 1000 ऑपरेशन्स तक (कॉन्फ़िगरेबल)।
  • बड़े बैच्स के लिए, बेहतर थ्रूपुट के लिए छोटे बैच्स में विभाजित करें।
  1. - एकल MySQL क्वेरी में एकाधिक पंक्तियां कैसे प्राप्त करें

    LIKE ऑपरेटर का उपयोग करके पैटर्न मिलान के साथ एकाधिक पंक्तियां प्राप्त करना एकल MySQL क्वेरी में एकाधिक पंक्तियां प्राप्त करने के लिए LIKE ऑपरेटर का उपयोग करें। पहले टेबल बनाएं: create table DemoTable1385 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) ); Query OK, 0 rows affected (0

  1. - एकल MySQL क्वेरी में एकाधिक पंक्तियां डालें

    INSERT INTO ... VALUES (), (), () सिंटैक्स का उपयोग करके बल्क इन्सर्ट पहले टेबल बनाएं: create table DemoTable1384 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20), StudentAge int ); Query OK, 0 rows affected (0.63 sec) INSERT कमांड का उपयोग करके रिकॉर्ड डालें। यहां हम एक

  1. - MySQL में एक ही क्वेरी में एकाधिक रिकॉर्ड कैसे अपडेट करें?

    MySQL में UPDATE स्टेटमेंट में WHERE क्लॉज का उपयोग करके एक ही क्वेरी में एकाधिक कॉलम अपडेट किए जा सकते हैं, लेकिन एकाधिक पंक्तियों को अलग-अलग मानों से अपडेट करने के लिए CASE या एकाधिक क्वेरी की आवश्यकता होती है। उदाहरण: एक पंक्ति, एकाधिक कॉलम तालिका बनाएं: mysql> CREATE TABLE DemoTable ( -&