MongoDB में डायनामिक/वेरिएबल इंडेक्स का उपयोग करके ऐरे एलिमेंट अपडेट करना
जब ऐरे इंडेक्स रनटाइम तक ज्ञात नहीं होता (एक वेरिएबल में संग्रहीत), आप अपडेट ऑब्जेक्ट को प्रोग्रामेटिक रूप से डॉट नोटेशन के साथ कुंजी के रूप में इंडेक्स को जोड़कर बना सकते हैं।
सिंटैक्स पैटर्न
var yourIndexVariableName = yourIndexValue;
var anyVariableName = { "$set": {} };
anyVariableName["$set"]["yourFieldName." + yourIndexVariableName] = "yourValue";
db.yourCollectionName.update({ "_id": yourObjectId }, anyVariableName);
नमूना डेटा बनाना
> db.updateByVariableDemo.insertOne({"StudentSubjects":["MySQL","Java","SQL Server","PL/SQL"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd553c37924bb85b3f4893a") }
अपडेट से पहले डॉक्यूमेंट देखना
> db.updateByVariableDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd553c37924bb85b3f4893a"),
"StudentSubjects" : [ "MySQL", "Java", "SQL Server", "PL/SQL" ]
}
वेरिएबल इंडेक्स के साथ ऐरे एलिमेंट अपडेट करना
> var indexValue = 1;
> var valueToUpdate = { "$set": {} };
> valueToUpdate["$set"]["StudentSubjects." + indexValue] = "MongoDB";
MongoDB
> db.updateByVariableDemo.update(
{ "_id": ObjectId("5cd553c37924bb85b3f4893a") },
valueToUpdate
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम वेरिफाई करना
> db.updateByVariableDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd553c37924bb85b3f4893a"),
"StudentSubjects" : [ "MySQL", "MongoDB", "SQL Server", "PL/SQL" ]
}
यह कैसे काम करता है
- इंडेक्स को एक वेरिएबल में संग्रहीत करें (
indexValue = 1)। - एक खाली
$setऑब्जेक्ट बनाएं। - ब्रैकेट नोटेशन का उपयोग करके डायनामिक रूप से कुंजी
"StudentSubjects.1"सेट करें। - निर्मित अपडेट ऑब्जेक्ट के साथ अपडेट निष्पादित करें।
आधुनिक विकल्प (MongoDB 4.2+)
एग्रीगेशन पाइपलाइन के साथ updateOne/updateMany का उपयोग करें:
db.collection.updateOne(
{ _id: ObjectId("...") },
[
{ $set: { "StudentSubjects.1": "MongoDB" } }
]
);
यह दृष्टिकोण क्लाइंट-साइड स्ट्रिंग कंस्ट्रक्शन के बिना सीधे पाइपलाइन में डायनामिक फील्ड पथ का समर्थन करता है।
मुख्य बिंदु
- कुंजी नामों को डायनामिक रूप से बनाने के लिए ब्रैकेट नोटेशन (
obj["key"]) का उपयोग करें। - यह पैटर्न तब उपयोगी होता है जब इंडेक्स उपयोगकर्ता इनपुट या गणना से आता है।
- आउट-ऑफ-बाउंड इंडेक्स से बचने के लिए इंडेक्स को मान्य करें।