MongoDB में db.collection.update() विधि किसी संग्रह में मौजूदा दस्तावेज़ या दस्तावेज़ों को संशोधित करती है।
डिफ़ॉल्ट रूप से, यह केवल एक दस्तावेज़ को अपडेट करता है। लेकिन अगर multi: true निर्दिष्ट है, तो यह क्वेरी मानदंड से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करता है।
एकल दस्तावेज़ अपडेट करें
मान लीजिए हमारे पास pets . नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_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.update() विधि एक upsert स्वीकार करती है तर्क जो आपको एक अपरर्ट ऑपरेशन करने में सक्षम बनाता है।
जब upsert: true , यदि फ़िल्टर मानदंड से मेल खाता है, तो दस्तावेज़ को अपडेट किया जाता है, लेकिन यदि कोई मेल नहीं है, तो एक नया दस्तावेज़ डाला जाता है।
आइए मूल दस्तावेजों के साथ फिर से शुरू करें:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } उदाहरण:
db.pets.update(
{ name: "Bubbles" },
{ $set: { type: "Fish" } },
{ upsert: true }
) परिणाम:
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5fe2c925d9914101694102e1")
}) इस मामले में, कोई मिलान नहीं था, इसलिए एक दस्तावेज़ को हटा दिया गया था।
आइए संग्रह की जाँच करें।
db.pets.find() परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe2c925d9914101694102e1"), "name" : "Bubbles", "type" : "Fish" } एम्बेडेड दस्तावेज़
आप db.collection.update() . का भी उपयोग कर सकते हैं एम्बेड किए गए दस्तावेज़ों को अपडेट करने के लिए।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{
"_id" : 1,
"name" : "Wag",
"type" : "Dog",
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
} एम्बेडेड दस्तावेज़ को अपडेट करने के लिए हम निम्नलिखित कोड का उपयोग कर सकते हैं।
db.pets.update({
_id: 1
}, {
$set: {
"specs.weight": 20,
"specs.color": "blue"
}
}) परिणाम:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) इसलिए हम देख सकते हैं कि एक दस्तावेज़ का मिलान और संशोधन किया गया था।
आइए दस्तावेज़ देखें।
db.pets.find({
_id: 1
}).pretty() परिणाम:
{
"_id" : 1,
"name" : "Wag",
"type" : "Dog",
"specs" : {
"height" : 400,
"weight" : 20,
"color" : "blue"
}
} हम देख सकते हैं कि एम्बेडेड दस्तावेज़ निर्दिष्ट के अनुसार अपडेट किया गया था।
सरणी
आइए db.collection.update() का उपयोग करें किसी सरणी को अपडेट करने के लिए।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{
"_id" : 1,
"name" : "Wag",
"type" : "Dog",
"awards" : [
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} आइए दो सरणी तत्वों और कुत्ते के नाम को अपडेट करें।
db.pets.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
}) परिणाम:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) हम देख सकते हैं कि एक दस्तावेज़ का मिलान और संशोधन किया गया था।
और अब दस्तावेज़ को देखें।
db.pets.find().pretty() परिणाम:
{
"_id" : 1,
"name" : "Bark",
"type" : "Dog",
"awards" : [
"Bottom Dog",
"Worst Dog",
"Biggest Dog"
]
} सरणी फ़िल्टर पैरामीटर
आप arrayFilters . का भी उपयोग कर सकते हैं पैरामीटर और स्थितीय $ ऑपरेटर यह निर्धारित करने के लिए कि कौन से सरणी तत्वों को अपडेट करना है।
उदाहरण के लिए, मान लें कि हमारे पास players . नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] } हम केवल उन सरणी तत्वों को अपडेट करने के लिए निम्न क्वेरी चला सकते हैं जिनका मान एक निश्चित राशि से अधिक है (इस मामले में 10)।
db.players.update(
{ scores: { $gte: 10 } },
{ $set: { "scores.$[e]" : 10 } },
{ arrayFilters: [ { "e": { $gte: 10 } } ] }
) परिणाम:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
जैसा कि अपेक्षित था, यह केवल एक दस्तावेज़ को अपडेट करता है, भले ही दो दस्तावेज़ मानदंड से मेल खाते हों (क्योंकि हमने multi: true निर्दिष्ट नहीं किया था। )।
दस्तावेज़ अब इस तरह दिखते हैं।
db.players.find() परिणाम:
{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] } दस्तावेज़ 2 में दो सरणी तत्व अपडेट किए गए थे, क्योंकि वे तत्व मानदंड से मेल खाते थे।
अधिक जानकारी
db.collection.update() विधि अन्य मापदंडों को भी स्वीकार करती है, जैसे कि writeConcern , collation , और hint ।
db.collections.update() . के लिए MongoDB दस्तावेज़ देखें अधिक जानकारी के लिए।