MongoDB में पोजिशनल ऑपरेटर $ के साथ विशिष्ट सबडॉक्यूमेंट अपडेट करना
अपडेट करने के लिए $set के साथ UPDATE का उपयोग करें।
कलेक्शन बनाना
>db.demo135.insertOne({"Details":[{"EmployeeId":101,"EmployeeName":"Chris","EmployeeSalary":45000},{"EmployeeId":102,"EmployeeName":"Chris","EmployeeSalary":45000}]});
{ "acknowledged": true, "insertedId": ObjectId("5e31a5ddfdf09dd6d085399c") }
अपडेट से पहले
> db.demo135.find().pretty();
{ "_id": ObjectId("5e31a5ddfdf09dd6d085399c"), "Details": [ { "EmployeeId": 101, "EmployeeName": "Chris", "EmployeeSalary": 45000 }, { "EmployeeId": 102, "EmployeeName": "Chris", "EmployeeSalary": 45000 } ] }
दूसरे डॉक्यूमेंट को अपडेट करने की क्वेरी (EmployeeId: 102)
> db.demo135.update(
{ "Details.EmployeeId": 102 },
{ $set: { "Details.$.EmployeeName": "John Doe" } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
अपडेट के बाद
> db.demo135.find().pretty();
व्याख्या
- क्वेरी: {"Details.EmployeeId": 102}: उस डॉक्यूमेंट को ढूंढता है जहां Details ऐरे में EmployeeId 102 वाला तत्व है
- $set: फील्ड मान सेट करता है
- पोजिशनल ऑपरेटर $: क्वेरी से मेल खाने वाले ऐरे तत्व की स्थिति को संदर्भित करता है
- "Details.$.EmployeeName": केवल मिलान वाले ऐरे तत्व के EmployeeName को अपडेट करता है
- पहला तत्व (EmployeeId: 101) अपरिवर्तित रहता है
महत्वपूर्ण
पोजिशनल ऑपरेटर $ केवल क्वेरी में उपयोग किए गए ऐरे फील्ड के पहले मिलान वाले तत्व को अपडेट करता है। एकाधिक तत्वों को अपडेट करने के लिए $[ ] (MongoDB 3.6+) या updateMany के साथ पाइपलाइन का उपयोग करें।