MongoDB में सरणी के अंदर किसी ऑब्जेक्ट की एक फील्ड के आधार पर उसी ऑब्जेक्ट की दूसरी फील्ड अपडेट करने के लिए $elemMatch के साथ $set और पोजिशनल ऑपरेटर $ का उपयोग करें।
उदाहरण
सबडॉक्यूमेंट सरणी वाला दस्तावेज़ बनाएं:
> db.keyValueDemo.insertOne(
{
"_id": new ObjectId(),
"CustomerDetails": [
{"Name": "Chris", "Age": 24},
{"Name": "Robert", "Age": 29},
{"Name": "David", "Age": 35}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cefcf36ef71edecf6a1f6bf") }
दस्तावेज़ देखें:
> db.keyValueDemo.find().pretty();
{ "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"), "CustomerDetails" : [ { "Name" : "Chris", "Age" : 24 }, { "Name" : "Robert", "Age" : 29 }, { "Name" : "David", "Age" : 35 } ] }
Name "David" वाले ऑब्जेक्ट की Age को 56 पर अपडेट करें
> db.keyValueDemo.update(
{"CustomerDetails": {"$elemMatch": {"Name": "David"}}},
{"$set": {"CustomerDetails.$.Age": 56}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें:
> db.keyValueDemo.find().pretty();
{ "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"), "CustomerDetails" : [ { "Name" : "Chris", "Age" : 24 }, { "Name" : "Robert", "Age" : 29 }, { "Name" : "David", "Age" : 56 } ] }
व्याख्या:
$elemMatch- सरणी में दोनों शर्तें (Name: "David") एक ही ऑब्जेक्ट में पूरी हों यह सुनिश्चित करता है$पोजिशनल ऑपरेटर - $elemMatch से मिले हुए सरणी तत्व को संदर्भित करता है$set- उस तत्व की Age फील्ड अपडेट करता है
आधुनिक सिंटैक्स (MongoDB 3.6+) - arrayFilters:
db.keyValueDemo.updateOne(
{},
{$set: {"CustomerDetails.$[elem].Age": 56}},
{arrayFilters: [{"elem.Name": "David"}]}
);
यह अधिक स्पष्ट है और एकाधिक शर्तों के लिए बेहतर काम करता है।