MongoDB में गहरी नेस्टेड सरणी में ऑब्जेक्ट जोड़ने के लिए (केवल यदि पहले से मौजूद नहीं है), डॉट नोटेशन और स्थिति ऑपरेटर $ के साथ $addToSet का उपयोग करें।
उदाहरण: खाली नेस्टेड सरणी वाला दस्तावेज़
> db.demo380.insertOne({
"details" : [
{ "Name" : "Chris", "details1" : [ ] },
{ "Name" : "David", "details1" : [ ] }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b56e32ae06a1609a00b11") }
दस्तावेज़ देखना
> db.demo380.find().pretty();
आउटपुट: दो तत्व, प्रत्येक में खाली details1 सरणी।
अपडेट: David के details1 में ऑब्जेक्ट जोड़ें
> db.demo380.update(
{ "details.Name": "David" },
{ $addToSet: { "details.$.details1": { 'SubjectName': "MongoDB", 'TeacherName': "Bob" } } },
false, true
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें
> db.demo380.find().pretty();
आउटपुट: David की details1 सरणी में अब ऑब्जेक्ट है; Chris की खाली है।
व्याख्या
{"details.Name": "David"}बाहरी दस्तावेज़ और सरणी तत्व से मेल खाता है।details.$.details1स्थिति ऑपरेटर$मेल खाने वाले सरणी तत्व (David) को संदर्भित करता है, फिर उसकीdetails1सरणी।$addToSetऑब्जेक्ट जोड़ता है केवल यदि सरणी में समान ऑब्जेक्ट नहीं है (गहरी समानता जांच)।- अंतिम दो तर्क
upsert: false, multi: trueहैं (विरासतupdateसिंटैक्स)।
आधुनिक सिंटैक्स (updateOne/updateMany)
> db.demo380.updateOne(
{ "details.Name": "David" },
{ $addToSet: { "details.$.details1": { SubjectName: "MongoDB", TeacherName: "Bob" } } }
);
नोट
$addToSet पूरे ऑब्जेक्ट समानता की जांच करता है। यदि आप केवल एक फील्ड (जैसे SubjectName) द्वारा विशिष्टता लागू करना चाहते हैं, तो arrayFilters के साथ अलग दृष्टिकोण या $set का उपयोग करें।