MongoDB किसी दस्तावेज़ को अद्यतन करने के विभिन्न तरीके प्रदान करता है। आपके द्वारा उपयोग की जाने वाली विधि इस बात पर निर्भर करेगी कि आप अपडेट कैसे करना चाहते हैं।
यह लेख MongoDB में किसी दस्तावेज़ को अद्यतन करने के 4 तरीके प्रस्तुत करता है।
द db.collection.updateOne() विधि
db.collection.updateOne() मेथड ठीक वैसा ही काम करता है जैसा इसके नाम का वादा करता है - यह एक दस्तावेज़ को अपडेट करता है।
मान लीजिए हमारे पास pets . नामक संग्रह है जिसमें निम्नलिखित दस्तावेज शामिल हैं:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } हम एक दस्तावेज़ को इस तरह अपडेट कर सकते हैं:
db.pets.updateOne(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) परिणाम:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
इसने केवल एक दस्तावेज़ को अपडेट किया, भले ही दो दस्तावेज़ फ़िल्टर मानदंड से मेल खाते हों (मानदंड type: "Dog" )।
हम इस तरह से परिणाम देख सकते हैं:
db.pets.find() परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
पहले दस्तावेज़ में अब type है Cow . का Dog . के बजाय , लेकिन दूसरा दस्तावेज़ अप्रभावित था, भले ही वह फ़िल्टरिंग मानदंड से मेल खाता हो।
द db.collection.updateMany() विधि
db.collection.updateMany() विधि संग्रह के लिए निर्दिष्ट फ़िल्टर से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करती है।
आइए मूल संग्रह दस्तावेज़ों का उपयोग करें:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
एक बार फिर, हम देख सकते हैं कि दो दस्तावेज़ों में Dog है उनके type . के रूप में ।
हम दोनों दस्तावेज़ों को एक साथ इस तरह अपडेट कर सकते हैं:
db.pets.updateMany(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) परिणाम:
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } इससे पता चलता है कि दो दस्तावेज़ मेल खाते थे और दो अपडेट किए गए थे।
हम संग्रह की जांच कर सकते हैं:
db.pets.find() परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } db.collection.update() विधि
db.collection.update() विधि एक संग्रह में एक दस्तावेज़ या एकाधिक दस्तावेज़ों को अद्यतन कर सकती है।
डिफ़ॉल्ट रूप से, यह केवल एक दस्तावेज़ को अपडेट करता है। लेकिन अगर multi: true निर्दिष्ट है, तो यह क्वेरी मानदंड से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करता है।
एकल दस्तावेज़ अपडेट करें
आइए फिर से दस्तावेजों के मूल संग्रह का उपयोग करें:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } हम एक दस्तावेज़ को इस तरह अपडेट कर सकते हैं:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } }
) परिणाम:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) केवल एक दस्तावेज़ अपडेट किया गया था। जब हम संग्रह को क्वेरी करते हैं तो इसकी पुष्टि हो जाती है।
db.pets.find() परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } एकाधिक दस्तावेज़ अपडेट करें
आइए फिर से दस्तावेजों के मूल संग्रह पर वापस जाएं:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
और अब हम जोड़ देंगे multi: true क्वेरी मानदंड से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करने के लिए हमारे अपडेट ऑपरेशन में:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } },
{ multi: true }
) परिणाम:
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) इसलिए इस बार दो दस्तावेज़ों का मिलान और अद्यतन किया गया।
आइए हमारे संग्रह को फिर से देखें:
db.pets.find() परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
जैसा कि अपेक्षित था, दोनों दस्तावेज़ों में अब एक type है Cow . का ।
द db.collection.replaceOne() विधि
db.collection.replaceOne() विधि फ़िल्टर के आधार पर संग्रह के भीतर एकल दस्तावेज़ को बदल देती है।
मूल संग्रह का पुन:उपयोग करना:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
आइए देखें कि क्या होता है जब हम db.collection.replaceOne() . का उपयोग करते हैं इसके खिलाफ विधि।
db.pets.replaceOne(
{ type: "Dog" },
{ type: "Cow" }
) परिणाम:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } एक दस्तावेज़ अपडेट किया गया था।
आइए एक नज़र डालते हैं।
db.pets.find() परिणाम:
{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
इस बार, पूरे दस्तावेज़ को नए दस्तावेज़ से बदल दिया गया था (_id . को छोड़कर) खेत)।
यह विधि पूरे दस्तावेज़ को बदल देती है (_id . को छोड़कर) फ़ील्ड)।
अप्सर्ट
उपरोक्त सभी विधियाँ एक upsert accept स्वीकार करती हैं तर्क जो आपको एक अपरर्ट ऑपरेशन करने में सक्षम बनाता है।
जब upsert: true , यदि क्वेरी मानदंड से मेल खाता है, तो दस्तावेज़ को अपडेट किया जाता है, लेकिन यदि कोई मेल नहीं है, तो एक नया दस्तावेज़ डाला जाता है।
उदाहरण:
db.pets.updateOne(
{ name: "Wag" },
{ $set: { type: "Cow" } },
{ upsert: true }
) परिणाम:
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5fe1d5aad991410169410165")
} इस मामले में, कोई मिलान नहीं था, इसलिए एक दस्तावेज़ को हटा दिया गया था।
आइए संग्रह की जाँच करें।
db.pets.find() परिणाम:
{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }