MongoDB में सरणी के अंदर शर्त पूरी करने वाले ऑब्जेक्ट में नया फील्ड/मान जोड़ने के लिए पोजिशनल ऑपरेटर $ के साथ $push का उपयोग करें।
उदाहरण
सबडॉक्यूमेंट सरणी वाला दस्तावेज़ बनाएं:
> db.updateArrayElementDemo.insertOne(
{
"UserDetails": [
{"UserName": "Chris", "UserAge": 23}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5ce9029378f00858fb12e90d") }
दस्तावेज़ देखें:
> db.updateArrayElementDemo.find().pretty();
{ "_id" : ObjectId("5ce9029378f00858fb12e90d"), "UserDetails" : [ { "UserName" : "Chris", "UserAge" : 23 } ] }
UserAge 23 वाले ऑब्जेक्ट में UserCountryName सरणी बनाकर "US" जोड़ें
db.updateArrayElementDemo.update(
{"UserDetails.UserAge": 23},
{$push: {"UserDetails.$.UserCountryName": "US"}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें:
> db.updateArrayElementDemo.find().pretty();
{ "_id" : ObjectId("5ce9029378f00858fb12e90d"), "UserDetails" : [ { "UserName" : "Chris", "UserAge" : 23, "UserCountryName" : [ "US" ] } ] }
व्याख्या:
UserDetails.UserAge: 23- सरणी में UserAge=23 वाला तत्व ढूंढता हैUserDetails.$.UserCountryName-$मिले हुए सरणी तत्व को संदर्भित करता है$push- उस तत्व में UserCountryName सरणी बनाकर "US" जोड़ता है- यदि फील्ड मौजूद नहीं है, तो सरणी के रूप में बनाता है
सीमाएं:
$केवल पहला मिलान करने वाला तत्व अपडेट करता है- एकाधिक मिलान के लिए
arrayFilters(MongoDB 3.6+) उपयोग करें
arrayFilters विकल्प (अनुशंसित)
db.updateArrayElementDemo.updateOne(
{},
{$push: {"UserDetails.$[elem].UserCountryName": "US"}},
{arrayFilters: [{"elem.UserAge": 23}]}
);
यह अधिक स्पष्ट है, एकाधिक तत्व अपडेट कर सकता है, और नेस्टेड सरणी के लिए बेहतर काम करता है।