অ্যারে সাব-ডকুমেন্ট আপডেট: পজিশনাল $ অপারেটর
MongoDB-এ একটি অ্যারে সাব-ডকুমেন্টের নির্দিষ্ট ফিল্ড আপডেট করতে updateOne() সহ পজিশনাল $ অপারেটর ব্যবহার করা হয়। এটি কোয়েরিতে ম্যাচ করা অ্যারে এলিমেন্টের ইনডেক্সকে রিপ্রেজেন্ট করে।
নমুনা ডেটা তৈরি
> db.demo462.insertOne({
"id": 1,
"DueDateDetails": [
{ "Name": "David", "Age": 21, "CountryName": ["US", "UK"] },
{ "Name": "Chris", "Age": 23, "CountryName": ["UK"] }
]
})
সমস্ত ডকুমেন্ট দেখানো
> db.demo462.find()
আউটপুট:
{ "_id": ObjectId("..."), "id": 1, "DueDateDetails": [{ "Name": "David", "Age": 21, "CountryName": ["US", "UK"] }, { "Name": "Chris", "Age": 23, "CountryName": ["UK"] }] }
নির্দিষ্ট সাব-ডকুমেন্ট আপডেট (Chris-এর CountryName পরিবর্তন)
> db.demo462.updateOne(
{ id: 1, "DueDateDetails.Name": "Chris" },
{ $set: { "DueDateDetails.$.CountryName": "AUS" } }
)
ফলাফল:
{ "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }
আপডেট後の ডকুমেন্ট
> db.demo462.find().pretty()
আউটপুট:
{ "_id": ObjectId("..."), "id": 1, "DueDateDetails": [{ "Name": "David", "Age": 21, "CountryName": ["US", "UK"] }, { "Name": "Chris", "Age": 23, "CountryName": "AUS" }] }
ব্যাখ্যা
{ id: 1, "DueDateDetails.Name": "Chris" }: প্যারেন্ট ডকুমেন্ট এবং অ্যারে এলিমেন্ট দুইটোই ফিল্টার করেDueDateDetails.$.CountryName:$ম্যাচ করা এলিমেন্টের (দ্বিতীয়, ইনডেক্স ১) পজিশন দিয়ে শুধু সেটি আপডেট করে- শুধু প্রথম ম্যাচ করা এলিমেন্ট আপডেট হয় (একাধিক ম্যাচ হলে প্রথমটিই)
- নোট: একাধিক এলিমেন্ট আপডেট করতে হলে
$[](অল এলিমেন্টস) বা$[identifier](ফিল্টার্ড এলিমেন্টস) ব্যবহার করুন (MongoDB 3.6+)