MongoDB-এ অ্যারেতে থাকা অবজেক্টের মধ্যে নির্দিষ্ট শর্ত পূরণ করা এলিমেন্টের অন্য ফিল্ড আপডেট করতে $elemMatch এবং $set সহ পজিশনাল $ অপারেটর ব্যবহার করুন।
উদাহরণ
অ্যারে অফ অবজেক্টস সহ ডকুমেন্ট তৈরি করুন:
> db.keyValueDemo.insertOne({
"_id": new ObjectId(),
"CustomerDetails": [
{ "Name": "Chris", "Age": 24 },
{ "Name": "Robert", "Age": 29 },
{ "Name": "David", "Age": 35 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5cefcf36ef71edecf6a1f6bf") }
ডকুমেন্টটি দেখুন:
> db.keyValueDemo.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"), "CustomerDetails" : [ { "Name" : "Chris", "Age" : 24 }, { "Name" : "Robert", "Age" : 29 }, { "Name" : "David", "Age" : 35 } ] }
Name = "David" olan এলিমেন্টের Age ৫৬ আপডেট করা
> db.keyValueDemo.update(
{ "CustomerDetails": { "$elemMatch": { "Name": "David" } } },
{ "$set": { "CustomerDetails.$.Age": 56 } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেট হওয়ার পর ডকুমেন্টটি যাচাই করুন:
> db.keyValueDemo.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"), "CustomerDetails" : [ { "Name" : "Chris", "Age" : 24 }, { "Name" : "Robert", "Age" : 29 }, { "Name" : "David", "Age" : 56 } ] }
ব্যাখ্যা:
$elemMatch— অ্যারেতেName: "David"থাকা এলিমেন্টটি লোকেট করে।CustomerDetails.$.Age— পজিশনাল$সেই ম্যাচ করা এলিমেন্টকে পয়েন্ট করে।$set— শুধুAgeফিল্ড আপডেট হয়েছে, বাকি অপরিবর্তিত।
নোট: যদি একাধিক এলিমেন্ট শর্ত পূরণ করে, তবে শুধু প্রথমটি আপডেট হবে। সবগুলো আপডেট করতে arrayFilters (MongoDB ৩.৬+) ব্যবহার করুন।