MongoDB में पोजिशनल $ ऑपरेटर का उपयोग करके ऐरे में एम्बेडेड डॉक्यूमेंट में फील्ड जोड़ना
जब आप एक ऐरे के अंदर एक विशिष्ट एम्बेडेड डॉक्यूमेंट को अपडेट करना चाहते हैं, तो पोजिशनल $ ऑपरेटर का उपयोग करें जो क्वेरी शर्त से मेल खाने वाले पहले तत्व की पहचान करता है। यह आपको पूरे ऐरे को प्रभावित किए बिना एक नेस्टेड ऑब्जेक्ट में फील्ड जोड़ने/संशोधित करने की अनुमति देता है।
नमूना डेटा बनाना
> db.addAFieldDemo.insertOne(
{
"ClientName" : "Larry",
"ClientCountryName" : "US",
"ClientOtherDetails" : [
{
"ClientProjectName" : "Online Banking System"
}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd44bdc2cba06f46efe9ee8") }
अपडेट से पहले डॉक्यूमेंट देखना
> db.addAFieldDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd44bdc2cba06f46efe9ee8"),
"ClientName" : "Larry",
"ClientCountryName" : "US",
"ClientOtherDetails" : [
{
"ClientProjectName" : "Online Banking System"
}
]
}
एम्बेडेड डॉक्यूमेंट में फील्ड जोड़ना
$elemMatch का उपयोग करके ऐरे तत्व का पता लगाएं और पोजिशनल $ के साथ isMarried फील्ड जोड़ें:
> db.addAFieldDemo.update(
{ ClientOtherDetails: { $elemMatch: { "ClientProjectName" : "Online Banking System" } } },
{ $set : { 'ClientOtherDetails.$.isMarried' : true } },
true
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम वेरिफाई करना
> db.addAFieldDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd44bdc2cba06f46efe9ee8"),
"ClientName" : "Larry",
"ClientCountryName" : "US",
"ClientOtherDetails" : [
{
"ClientProjectName" : "Online Banking System",
"isMarried" : true
}
]
}
मुख्य अवधारणाएं
- $elemMatch - एक ही ऐरे तत्व के भीतर मल्टीपल शर्तों को निर्दिष्ट करता है।
- पोजिशनल $ ऑपरेटर - क्वेरी शर्त से मेल खाने वाले ऐरे में पहले तत्व को संदर्भित करता है।
- अपडेट में तीसरा पैरामीटर (true) - यदि कोई डॉक्यूमेंट मेल नहीं खाता तो अपसर्ट सक्षम करता है (वैकल्पिक)।
सर्वोत्तम अभ्यास
- जब ऐरे तत्व ऑब्जेक्ट्स हों और आप एक विशिष्ट ऑब्जेक्ट को इसकी सामग्री के आधार पर लक्षित करना चाहते हैं तो
$elemMatchका उपयोग करें। - पोजिशनल
$केवल पहले मिलान करने वाले तत्व को अपडेट करता है; सभी मिलान करने वाले तत्वों को अपडेट करने के लिए, एग्रीगेशन पाइपलाइन के साथupdateManyऔर$set+$mapका उपयोग करें (MongoDB 4.2+ में)।