MongoDB-এ গভীর নেস্টেড (Deeply Nested) ডকুমেন্ট আপডেট করা
MongoDB-এ নেস্টেড ডকুমেন্ট বা অ্যারে-র ভেতরের অবজেক্ট আপডেট করার জন্য $set অপারেটর দিয়ে ডট (.) নোটেশন বা পজিশনাল অপারেটর ব্যবহার করা হয়।
১. কালেকশন ও নেস্টেড ডকুমেন্ট তৈরি
> db.demo315.insertOne({
_id : 101,
details: [
{ Name: 'Chris', subjects: [{ id: 1001, SubjectName: "MySQL" }] }
]
});
{ "acknowledged" : true, "insertedId" : 101 }
২. আপডেটের আগে ডকুমেন্ট
> db.demo315.find().pretty();
আউটপুট:
{
"_id" : 101,
"details" : [
{
"Name" : "Chris",
"subjects" : [
{ "id" : 1001, "SubjectName" : "MySQL" }
]
}
]
}
৩. নেস্টেড ডকুমেন্ট আপডেট করা (subjects অ্যারে-র ২য় এলিমেন্টে id: 1004 যোগ)
> db.demo315.update({ _id: 101 }, { '$set': { "details.0.subjects.1.id" : 1004 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
পাথ ব্যাখ্যা: details.0.subjects.1.id
details.0- details অ্যারে-র প্রথম (০ ইনডেক্স) এলিমেন্ট।subjects.1- subjects অ্যারে-র দ্বিতীয় (১ ইনডেক্স) এলিমেন্ট (নতুন যোগ হবে)।id- সেটি ফিল্ড।
নোট: যেহেতু subjects অ্যারে-তে শুধু ১টি এলিমেন্ট ছিল (ইনডেক্স ০), ইনডেক্স ১-এ নতুন এলিমেন্ট যোগ হয়ে গেছে।
৪. আপডেটের পর ডকুমেন্ট
> db.demo315.find().pretty();
আউটপুট:
{
"_id" : 101,
"details" : [
{
"Name" : "Chris",
"subjects" : [
{ "id" : 1001, "SubjectName" : "MySQL" },
{ "id" : 1004 }
]
}
]
}
এখন subjects অ্যারে-তে দুটি এলিমেন্ট আছে। দ্বিতীয় এলিমেন্টে শুধু id: 1004 আছে, SubjectName নেই কারণ সেটি সেট করা হয়নি।