MongoDB में (विरासत update() सिंटैक्स में) एक क्वेरी से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करने के लिए, तीसरे तर्क में multi: true विकल्प शामिल करें। आधुनिक ड्राइवर updateMany() का उपयोग करते हैं।
उदाहरण: डुप्लिकेट नाम वाले दस्तावेज़
> db.demo390.insertOne({"FirstName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d1f3a22064be7ab44e7fa") }
> db.demo390.insertOne({"FirstName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d1f3e22064be7ab44e7fb") }
> db.demo390.insertOne({"FirstName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d1f4122064be7ab44e7fc") }
> db.demo390.insertOne({"FirstName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d1f4422064be7ab44e7fd") }
अपडेट से पहले
> db.demo390.find();
आउटपुट: दो "Chris", एक "David", एक "Bob"।
विरासत अपडेट साथ multi: true
> db.demo390.update(
{ FirstName: "Chris" },
{ $set: { "FirstName": "John" } },
{ multi: true }
);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
अपडेट के बाद
> db.demo390.find();
आउटपुट: दोनों "Chris" दस्तावेज़ अब "John" हैं।
आधुनिक सिंटैक्स (MongoDB 3.2+)
> db.demo390.updateMany(
{ FirstName: "Chris" },
{ $set: { "FirstName": "John" } }
);
updateMany डिफ़ॉल्ट रूप से सभी मिलान वाले दस्तावेज़ों को अपडेट करता है; multi की आवश्यकता नहीं।
मुख्य अंतर
| मेथड | व्यवहार |
|---|---|
update(query, update) | डिफ़ॉल्ट रूप से पहला मिलान अपडेट करता है; multi:true के साथ सभी। |
updateOne(query, update) | पहला मिलान अपडेट करता है। |
updateMany(query, update) | सभी मिलान अपडेट करता है। |
सर्वोत्तम अभ्यास
- नए कोड में
updateOne/updateManyका उपयोग करें;updateविरासत है। - बड़े बैच अपडेट के लिए,
bulkWriteका उपयोग करें। - परिणाम में
nMatched/nModifiedकी जांच करके प्रभाव की पुष्टि करें।