অ্যারে নির্দিষ্ট ইনডেক্স আপডেট: ডট নোটেশন + পজিশনাল $
MongoDB-এ একটি অ্যারে অবজেক্টের নির্দিষ্ট ইনডেক্স (পজিশন) আপডেট করতে ডট নোটেশন দিয়ে ইনডেক্স স্পেসিফাই করে $set ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
> db.demo489.insertOne({
details: [
{ id: 101, "Info1": { "StudentName": "Chris" }, "Info2": { "TeacherName": "David" } },
{ id: 102, "Info1": { "StudentName": "Carol" }, "Info2": { "TeacherName": "Mike" } }
]
})
সমস্ত ডকুমেন্ট দেখানো
> db.demo489.find()
আউটপুট:
{ "_id": ObjectId("..."), "details": [{ "id": 101, "Info1": { "StudentName": "Chris" }, "Info2": { "TeacherName": "David" } }, { "id": 102, "Info1": { "StudentName": "Carol" }, "Info2": { "TeacherName": "Mike" } }] }
দ্বিতীয় এলিমেন্ট (ইনডেক্স ১ / id:102) আপডেট করা
> db.demo489.update(
{ "details.id": 102 },
{ $set: {
"details.$.Info1.StudentName": "Robert",
"details.$.Info2.TeacherName": "John",
"details.$.CountryName": "US"
}}
)
ফলাফল:
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
আপডেট後の ডকুমেন্ট
> db.demo489.find().pretty()
আউটপুট:
{ "_id": ObjectId("..."), "details": [{ "id": 101, "Info1": { "StudentName": "Chris" }, "Info2": { "TeacherName": "David" } }, { "id": 102, "Info1": { "StudentName": "Robert" }, "Info2": { "TeacherName": "John" }, "CountryName": "US" }] }
ব্যাখ্যা
{ "details.id": 102 }: অ্যারেdetailsএid: 102থাকা এলিমেন্ট খুঁজেdetails.$.Info1.StudentName: পজিশনাল$ম্যাচ করা এলিমেন্টের (দ্বিতীয়) পজিশন রিপ্রেজেন্ট করে- একসাথে একাধিক নেস্টেড ফিল্ড আপডেট করা হয়েছে (+ নতুন ফিল্ড
CountryNameযোগ) - সতর্কতা: শুধু প্রথম ম্যাচ আপডেট হয়। একাধিক ম্যাচ হলে সব আপডেট করতে
$[](MongoDB 3.6+) ব্যবহার করুন - আধুনিক সিনট্যাক্স:
updateOne()/updateMany()