हाँ, एक ही अपडेट ऑपरेशन में $addToSet का कई बार उपयोग करना संभव है। यह ऑपरेटर सरणी में मान जोड़ता है केवल अगर वे पहले से मौजूद नहीं हैं, जिससे डुप्लिकेट रोकने में मदद मिलती है।
उदाहरण: नेस्टेड सरणी सेटअप
एक संग्रह बनाएं जिसमें नेस्टेड ऑब्जेक्ट के अंदर विषयों की सरणी हो:
> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["Java"]}}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15f9e822d07d3b95082e7f") }
> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["MySQL"]}}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15f9eb22d07d3b95082e80") }
दस्तावेज़ देखना
> db.demo27.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
"StudentDetails" : {
"101" : { "Subject" : [ "Java" ] }
}
}
{
"_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
"StudentDetails" : {
"101" : { "Subject" : [ "MySQL" ] }
}
}
एक ही अपडेट में $addToSet का उपयोग
पहले दस्तावेज़ की सरणी में "MongoDB" जोड़ें (डॉट नोटेशन के साथ नेस्टेड पथ):
> db.demo27.update({}, {$addToSet: {"StudentDetails.101.Subject": "MongoDB"}}, {upsert: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें
> db.demo27.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
"StudentDetails" : {
"101" : { "Subject" : [ "Java", "MongoDB" ] }
}
}
{
"_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
"StudentDetails" : {
"101" : { "Subject" : [ "MySQL" ] }
}
}
नोट
$addToSetसुनिश्चित करता है कि "MongoDB" केवल पहली सरणी में जोड़ा गया क्योंकि दूसरी सरणी क्वेरी मानदंड से मेल नहीं खाती (खाली फिल्टर{}पहले दस्तावेज़ से मेल खाता है)।- एक ही अपडेट में कई फील्ड्स पर
$addToSetलागू करने के लिए, ऑपरेटर ऑब्जेक्ट में कई कुंजियाँ शामिल करें:{$addToSet: {"field1": val1, "field2": val2}}। - आधुनिक MongoDB संस्करणों में
updateOne/updateManyपसंद किए जाते हैं।