MongoDB में $set से नेस्टेड सब-ऑब्जेक्ट अपडेट करना
एम्बेडेड डॉक्यूमेंट (सब-ऑब्जेक्ट) में नया फ़ील्ड जोड़ने या मौजूदा फ़ील्ड अपडेट करने के लिए डॉट नोटेशन के साथ $set ऑपरेटर उपयोग करें।
कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें
> db.updateSubObjectDemo.insertOne({
"ClientId": 100,
"ClientDetails": {
"ClientFirstName": "Adam"
}
});
{ "acknowledged": true, "insertedId": ObjectId("5cd31434b64f4b851c3a13e9") }
डॉक्यूमेंट देखें
>> db.updateSubObjectDemo.find().pretty();
{
"_id": ObjectId("5cd31434b64f4b851c3a13e9"),
"ClientId": 100,
"ClientDetails": {
"ClientFirstName": "Adam"
}
}
सब-ऑब्जेक्ट में ClientLastName जोड़ें
> db.updateSubObjectDemo.update(
{ClientId: 100},
{$set: {"ClientDetails.ClientLastName": "Smith"}}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
अपडेट के बाद चेक करें
> db.updateSubObjectDemo.find().pretty();
{
"_id": ObjectId("5cd31434b64f4b851c3a13e9"),
"ClientId": 100,
"ClientDetails": {
"ClientFirstName": "Adam",
"ClientLastName": "Smith"
}
}
मुख्य बिंदु
ClientDetails.ClientLastName- डॉट नोटेशन से नेस्टेड फ़ील्ड पथ$setकेवल निर्दिष्ट फ़ील्ड बदलता है, बाकी सब-ऑब्जेक्ट अपरिवर्तित रहता है- अगर फ़ील्ड मौजूद नहीं है तो नया बन जाता है
- पूरा सब-ऑब्जेक्ट रिप्लेस नहीं होता (वह
$setके बिना होता)
आधुनिक सिंटैक्स
db.updateSubObjectDemo.updateOne(
{ClientId: 100},
{$set: {"ClientDetails.ClientLastName": "Smith"}}
)