MongoDB में (संस्करण 3.6+) सरणी के सभी तत्वों को अपडेट करने के लिए, ऑल स्थितीय ऑपरेटर $[] का उपयोग करें। यह फिल्टर से मेल खाने वाले दस्तावेज़ में निर्दिष्ट सरणी के हर तत्व पर अपडेट लागू करता है।
उदाहरण: सर्वर लॉग सरणी वाला दस्तावेज़
> db.demo385.insertOne({
"ServerLogs": [
{ "status": "InActive" },
{ "status": "InActive" },
{ "status": "InActive" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b6a7522064be7ab44e7f5") }
दस्तावेज़ देखना
> db.demo385.find().pretty();
आउटपुट: तीन "InActive" तत्व वाली सरणी।
अपडेट: सभी तत्वों के status को "Active" पर सेट करें
> db.demo385.update(
{ "_id" : ObjectId("5e5b6a7522064be7ab44e7f5") },
{ $set: { "ServerLogs.$[].status": "Active" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें
> db.demo385.find().pretty();
आउटपुट: सभी तीन तत्व अब status: "Active" दिखाते हैं।
व्याख्या
$[](ऑल स्थितीय ऑपरेटर) सरणी में प्रत्येक तत्व के लिए अपडेट को इंगित करता है।$setप्रत्येक तत्व परstatusफील्ड सेट करता है।- कोई फिल्टर शर्त आवश्यक नहीं; दस्तावेज़ फिल्टर (
_id) दस्तावेज़ का चयन करता है।
शर्त के साथ अपडेट (arrayFilters)
केवल कुछ तत्वों को अपडेट करने के लिए, arrayFilters के साथ फ़िल्टर्ड स्थितीय ऑपरेटर $[identifier] का उपयोग करें:
> db.demo385.update(
{ "_id": ObjectId("5e5b6a7522064be7ab44e7f5") },
{ $set: { "ServerLogs.$[elem].status": "Active" } },
{ arrayFilters: [ { "elem.status": "InActive" } ] }
);
स्थितीय ऑपरेटर्स की तुलना
| ऑपरेटर | लक्ष्य |
|---|---|
$ | पहला मिलान वाला तत्व (फिल्टर से)। |
$[] | सभी तत्व (कोई फिल्टर नहीं)। |
$[identifier] | arrayFilters से मेल खाने वाले तत्व। |
नोट
$[] के लिए MongoDB 3.6+ आवश्यक। विरासत update() के बजाय updateOne/updateMany पसंद करें।