MongoDB में $addToSet और पोजिशनल $ का उपयोग करके नेस्टेड ऐरे में डेटा इन्सर्ट करना
एक ऐरे के अंदर एक विशिष्ट एम्बेडेड डॉक्यूमेंट के नेस्टेड ऐरे में एलिमेंट जोड़ने के लिए, मिलान करने वाले एम्बेडेड डॉक्यूमेंट को लक्षित करने के लिए पोजिशनल $ ऑपरेटर के साथ $addToSet का उपयोग करें।
नमूना डेटा बनाना
> db.insertDataIntoArrayDemo.insertOne(
{
"UserDetails":[
{ "UserId" : "user121", "userGroupMessage": [] },
{ "UserId" : "user221", "userGroupMessage": ["Cool", "Good Morning"] }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd694e157806ebf1256f128") }
डॉक्यूमेंट देखना
> db.insertDataIntoArrayDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd694e157806ebf1256f128"),
"UserDetails" : [
{ "UserId" : "user121", "userGroupMessage" : [ ] },
{ "UserId" : "user221", "userGroupMessage" : [ "Cool", "Good Morning" ] }
]
}
नेस्टेड ऐरे में संदेश जोड़ना
UserId: "user121" वाले डॉक्यूमेंट के userGroupMessage ऐरे में "Hello" जोड़ें:
> db.insertDataIntoArrayDemo.update(
{ "UserDetails.UserId": "user121" },
{ "$addToSet": { "UserDetails.$.userGroupMessage": "Hello" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम वेरिफाई करना
> db.insertDataIntoArrayDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd694e157806ebf1256f128"),
"UserDetails" : [
{ "UserId" : "user121", "userGroupMessage" : [ "Hello" ] },
{ "UserId" : "user221", "userGroupMessage" : [ "Cool", "Good Morning" ] }
]
}
व्याख्या
{ "UserDetails.UserId": "user121" }- बाहरी ऐरे में मिलान करने वाला तत्व ढूंढता है।UserDetails.$.userGroupMessage- पोजिशनल$मिलान किए गए ऐरे तत्व को संदर्भित करता है।$addToSet- "Hello" तभी जोड़ता है जब पहले से मौजूद न हो (डुप्लिकेट रोकता है)।
महत्वपूर्ण सीमाएं
- पोजिशनल
$केवल पहले मिलान करने वाले ऐरे तत्व को अपडेट करता है। - यदि मल्टीपल तत्व क्वेरी से मेल खाते हैं, तो केवल पहले को संशोधित किया जाता है।
- सभी मिलान करने वाले तत्वों को अपडेट करने के लिए, MongoDB 4.2+ में
updateManyके साथ एग्रीगेशन पाइपलाइन ($map,$cond) का उपयोग करें।
बहु-स्तरीय नेस्टिंग के लिए विकल्प
गहरे नेस्टेड ऐरे (ऐरे के अंदर ऐरे के अंदर ऐरे) के लिए, फिल्टर्ड पोजिशनल ऑपरेटर $[identifier] के साथ arrayFilters (MongoDB 3.6+) का उपयोग करने पर विचार करें।