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