MongoDB-এ নেস্টেড অ্যারেতে নির্দিষ্ট ইনডেক্স বা পজিশনের ফিল্ড আপডেট করতে পজিশনাল $ অপারেটর এবং ডট নোটেশন ব্যবহার করা হয়। অ্যারে ইনডেক্স ০ থেকে শুরু হয়।
সিনট্যাক্স
db.collection.update(
{ "arrayField.nestedField": "matchValue" },
{ $set: { "arrayField.$.nestedArray.index": "newValue" } }
);
নমুনা কালেকশন তৈরি
> db.updateExactField.insertOne({
"ActorId": 1,
"ActorDetails": [
{ "ActorName": "Johnny Depp", "MovieList": ["The Tourist", "Public Enemy"] },
{ "ActorName": "Chris Evans", "MovieList": ["Captain America", "Avengers"] }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5c6d7f63f2db199c1278e7f1") }
ডকুমেন্ট প্রদর্শন
> db.updateExactField.find().pretty();
আউটপুট:
{
"_id": ObjectId("5c6d7f63f2db199c1278e7f1"),
"ActorId": 1,
"ActorDetails": [
{ "ActorName": "Johnny Depp", "MovieList": [ "The Tourist", "Public Enemy" ] },
{ "ActorName": "Chris Evans", "MovieList": [ "Captain America", "Avengers" ] }
]
}
কেস ১: তৃতীয় পজিশন (ইনডেক্স ২) আপডেট
Chris Evans-এর MovieList অ্যারেতে ইনডেক্স ২-এ "Avengers:Infinity War" যোগ করা:
> db.updateExactField.update(
{ "ActorDetails.ActorName": "Chris Evans" },
{ $set: { "ActorDetails.$.MovieList.2": "Avengers:Infinity War" } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
ফলাফল যাচাই
> db.updateExactField.find().pretty();
আউটপুট:
{
"_id": ObjectId("5c6d7f63f2db199c1278e7f1"),
"ActorId": 1,
"ActorDetails": [
{ "ActorName": "Johnny Depp", "MovieList": [ "The Tourist", "Public Enemy" ] },
{ "ActorName": "Chris Evans", "MovieList": [ "Captain America", "Avengers", "Avengers:Infinity War" ] }
]
}
কেস ২: দ্বিতীয় পজিশন (ইনডেক্স ১) আপডেট
এখন ইনডেক্স ১-এ "Gifted" সেট করা:
> db.updateExactField.update(
{ "ActorDetails.ActorName": "Chris Evans" },
{ $set: { "ActorDetails.$.MovieList.1": "Gifted" } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
ফলাফল যাচাই
> db.updateExactField.find().pretty();
আউটপুট:
{
"_id": ObjectId("5c6d7f63f2db199c1278e7f1"),
"ActorId": 1,
"ActorDetails": [
{ "ActorName": "Johnny Depp", "MovieList": [ "The Tourist", "Public Enemy" ] },
{ "ActorName": "Chris Evans", "MovieList": [ "Captain America", "Gifted", "Avengers:Infinity War" ] }
]
}
ব্যাখ্যা: পজিশনাল $ অপারেটর কোয়েরি মিলে যাওয়া প্রথম অ্যারে এলিমেন্টকে নির্দেশ করে। তারপর ডট নোটেশন দিয়ে নেস্টেড অ্যারেতে নির্দিষ্ট ইনডেক্স আপডেট করা যায়। ইনডেক্স আউট-অফ-বাউন্ড হলে নতুন এলিমেন্ট যোগ হয়।