MongoDB में नेस्टेड ऐरे में नया फील्ड जोड़ना
इसके लिए find() के साथ update() का उपयोग करें।
कलेक्शन बनाना
> db.demo124.insertOne(
{
"Name": "John",
"Id": 101,
"ProjectDetails": [
{
"ProjectName1": "Online Book",
"ProjectName2": "Online Banking"
},
{
"ProjectName1": "Online Library Management System",
"ProjectName2": "School Management System"
}
]
}
);
{ "acknowledged": true, "insertedId": ObjectId("5e2f2c8b140daf4c2a3544bb") }
अपडेट से पहले
> db.demo124.find();
{ "_id": ObjectId("5e2f2c8b140daf4c2a3544bb"), "Name": "John", "Id": 101, "ProjectDetails": [ { "ProjectName1": "Online Book", "ProjectName2": "Online Banking" }, { "ProjectName1": "Online Library Management System", "ProjectName2": "School Management System" } ] }
नेस्टेड ऐरे में नया फील्ड जोड़ने की क्वेरी
> db.demo124.find().toArray().forEach(
function(d){
for(var i = 0; i < d.ProjectDetails.length; ++i) {
d.ProjectDetails[i]['ProjectName3'] = 'Online Snake Game';
}
db.demo124.update({_id: d._id}, d);
}
);
अपडेट के बाद
> db.demo124.find().pretty();
{ "_id": ObjectId("5e2f2c8b140daf4c2a3544bb"), "Name": "John", "Id": 101, "ProjectDetails": [ { "ProjectName1": "Online Book", "ProjectName2": "Online Banking", "ProjectName3": "Online Snake Game" }, { "ProjectName1": "Online Library Management System", "ProjectName2": "School Management System", "ProjectName3": "Online Snake Game" } ] }
व्याख्या
- find().toArray(): सभी डॉक्यूमेंट्स को ऐरे में लोड करता है
- forEach: प्रत्येक डॉक्यूमेंट पर पुनरावृति करता है
- for लूप: ProjectDetails ऐरे के प्रत्येक तत्व पर पुनरावृति करता है
- d.ProjectDetails[i]['ProjectName3'] = 'Online Snake Game': प्रत्येक सब-डॉक्यूमेंट में नया फील्ड जोड़ता है
- update({_id: d._id}, d): संशोधित डॉक्यूमेंट सेव करता है
आधुनिक दृष्टिकोण (MongoDB 3.6+)
db.demo124.updateMany(
{},
{ $set: { "ProjectDetails.$[].ProjectName3": "Online Snake Game" } }
)
$[ ] ऑल पोजिशनल ऑपरेटर ऐरे के सभी तत्वों को अपडेट करता है बिना क्लाइंट-साइड लूप के।