MongoDB-তে নেস্টেড অ্যারে ভিতরের নির্দিষ্ট এলিমেন্ট আপডেট করতে কোয়েরিতে দুটি শর্ত (প্যারেন্ট _id এবং চাইল্ড id) দিয়ে ম্যাচ করে, পজিশনাল $ অপারেটর দিয়ে সেটি আপডেট করা হয়।
উদাহরণ: প্রোডাক্ট কোয়ান্টিটি সহ ডকুমেন্ট (দুই ডকুমেন্ট)
> db.demo605.insertOne({
_id: 1,
"Information": [
{ "id": "Product-1", "Quantity": 50 },
{ "id": "Product-2", "Quantity": 100 }
]
});
> db.demo605.insertOne({
_id: 2,
"Information": [
{ "id": "Product-1", "Quantity": 30 },
{ "id": "Product-2", "Quantity": 40 }
]
});
_id=1 এবং Product-1-এর কোয়ান্টিটি 1000 করা
> db.demo605.update(
{ _id: 1, "Information.id": "Product-1" },
{ $set: { "Information.$.Quantity": 1000 } }
);
রেজাল্ট: WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ফলাফল
> db.demo605.find().pretty();
আউটপুট: _id=1-এর Product-1-এর Quantity 1000 হয়েছে, বাকি অপরিবর্তিত।
দ্রষ্টব্য (টাইপো ফিক্স): কোয়েরিতে "Product1" লেখা আছে (হাইফেন নেই), কিন্তু ডেটায় "Product-1"। রিয়াল কোডে হাইফেন থাকতে হবে।
সেরা অনুশীলন:
- MongoDB 3.6+ এ
arrayFiltersব্যবহার করুন:{ arrayFilters: [{ "elem.id": "Product-1" }], $set: { "Information.$[elem].Quantity": 1000 } } - এটি একাধিক ম্যাচ হলে সব আপডেট করে (পজিশনাল
$শুধু প্রথমটি) - আপডেটের আগে
find()দিয়ে টার্গেট যাচাই করুন