MongoDB में सबडॉक्यूमेंट (नेस्टेड ऑब्जेक्ट) की सरणी में विशिष्ट इंडेक्स पर नया फील्ड जोड़ने के लिए डॉट नोटेशन के साथ $set ऑपरेटर का उपयोग करें।
उदाहरण
सबडॉक्यूमेंट सरणी वाला दस्तावेज़ बनाएं:
> db.addExtraFieldDemo.insertOne(
{
"_id": 1,
"UserName": "Larry",
"UserOtherDetails": [
{"UserCountryName": "US", "UserAge": 23},
{"UserCountryName": "UK", "UserAge": 24}
]
}
);
{ "acknowledged" : true, "insertedId" : 1 }
दस्तावेज़ देखें:
> db.addExtraFieldDemo.find().pretty();
{ "_id" : 1, "UserName" : "Larry", "UserOtherDetails" : [ { "UserCountryName" : "US", "UserAge" : 23 }, { "UserCountryName" : "UK", "UserAge" : 24 } ] }
पहले सबडॉक्यूमेंट (इंडेक्स 0) में isMarried_ फील्ड जोड़ें
> db.addExtraFieldDemo.update(
{"_id": 1},
{"$set": {"UserOtherDetails.0.isMarried_": true}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें:
> db.addExtraFieldDemo.find().pretty();
{ "_id" : 1, "UserName" : "Larry", "UserOtherDetails" : [ { "UserCountryName" : "US", "UserAge" : 23, "isMarried_" : true }, { "UserCountryName" : "UK", "UserAge" : 24 } ] }
व्याख्या:
UserOtherDetails.0.isMarried_- डॉट नोटेशन में सरणी इंडेक्स (0) शामिल करें- पहले तत्व (इंडेक्स 0) में नया फील्ड जुड़ा
- दूसरा तत्व (इंडेक्स 1) अपरिवर्तित रहा
शर्त आधारित अपडेट (arrayFilters - MongoDB 3.6+)
इंडेक्स के बजाय शर्त से पहचानें:
db.addExtraFieldDemo.updateOne(
{},
{$set: {"UserOtherDetails.$[elem].isMarried_": true}},
{arrayFilters: [{"elem.UserCountryName": "US"}]}
);
यह अधिक मजबूत है क्योंकि सरणी क्रम बदलने पर भी सही तत्व अपडेट होता है।
सभी तत्वों में फील्ड जोड़ें
db.collection.updateMany(
{},
{$set: {"UserOtherDetails.$[].isActive": true}}
);
$[] ऑल पोजिशनल ऑपरेटर सरणी के सभी तत्वों पर लागू होता है।