MongoDB-এ অ্যারেতে নেস্টেড ডকুমেন্ট খুঁজে বের করে সেটার মধ্যে নতুন ফিল্ড যোগ করতে (অথবা নতুন এলিমেন্ট যোগ করতে) পজিশনাল $ অপারেটর এবং $set বা $push ব্যবহার করা হয়।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo222.insertOne({"details":[{"StudentName":"Chris","StudentMarks":78},{"StudentName":"David","StudentMarks":89}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee31703d395bdc213472f") }
সব ডকুমেন্ট দেখানো
> db.demo222.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e3ee31703d395bdc213472f"), "details" : [ { "StudentName" : "Chris", "StudentMarks" : 78 }, { "StudentName" : "David", "StudentMarks" : 89 } ] }
নতুন ফিল্ড যোগ করার কোয়ারী (নেস্টেড এলিমেন্টে)
details.StudentName: "Chris" মিলে যাওয়া এলিমেন্টে SubjectName: "MongoDB" ফিল্ড যোগ করা হয়েছে:
> db.demo222.update({"details.StudentName" : "Chris"}, {$set: {"details.$.SubjectName": "MongoDB"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেটের পর ডকুমেন্ট দেখানো
> db.demo222.find().pretty();
আউটপুট (Chris-এ SubjectName যোগ হয়েছে):
{ "_id" : ObjectId("5e3ee31703d395bdc213472f"), "details" : [ { "StudentName" : "Chris", "StudentMarks" : 78, "SubjectName" : "MongoDB" }, { "StudentName" : "David", "StudentMarks" : 89 } ] }
ব্যাখ্যা:
details.StudentName: "Chris"- কোয়ারী: details অ্যারেতে StudentName "Chris" খুঁজেdetails.$.SubjectName- পজিশনাল$মিলে যাওয়া এলিমেন্টকে পয়েন্ট করে$set- নতুন ফিল্ড যোগ করে (যদি থাকে তবে আপডেট)
নতুন এলিমেন্ট যোগ করতে (পুশ):
db.demo222.update(
{_id: ObjectId("5e3ee31703d395bdc213472f")},
{$push: {details: {StudentName: "Bob", StudentMarks: 95}}}
)
আধুনিক পদ্ধতি (arrayFilters - MongoDB 3.6+):
db.demo222.updateOne(
{ "details.StudentName": "Chris" },
{ $set: { "details.$[elem].SubjectName": "MongoDB" } },
{ arrayFilters: [ { "elem.StudentName": "Chris" } ] }
)
arrayFilters একাধিক মিলে যাওয়া এলিমেন্ট হ্যান্ডেল করতে বেশি কন্ট্রোল দেয়।
সতর্কতা: টাইটেলে "নতুন অ্যারে এলিমেন্ট" বলা হয়েছে কিন্তু উদাহরণে নেস্টেড এলিমেন্টে নতুন ফিল্ড যোগ করা হয়েছে। পুরো নতুন এলিমেন্ট যোগ করতে $push ব্যবহার করুন।