MongoDB-এ findAndModify() ব্যবহার করে অ্যাটোমিক অ্যারে আপডেট
findAndModify() (বা আধুনিক findOneAndUpdate()) একটি ডকুমেন্ট খুঁজে, আপডেট করে এবং পুরনো/নতুন ভার্সন রিটার্ন করে — সবই একটি অ্যাটোমিক অপারেশনে। এটি কনকারেন্সি নিরাপদ।
উদাহরণ: ডেটা ইনসার্ট
> db.demo152.insertOne({"id":102,"Name":["Chris","David"],"Score":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3515bcfdf09dd6d08539dd") }
> db.demo152.insertOne({"id":103,"Name":["Mike","Carol"],"Score":65});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3515cafdf09dd6d08539de") }
সব ডকুমেন্ট দেখানো
> db.demo152.find();
আউটপুট:
{ "_id" : ObjectId("5e3515bcfdf09dd6d08539dd"), "id" : 102, "Name" : [ "Chris", "David" ], "Score" : 45 }
{ "_id" : ObjectId("5e3515cafdf09dd6d08539de"), "id" : 103, "Name" : [ "Mike", "Carol" ], "Score" : 65 }
findAndModify কোয়ারি (id=102, Score<50, Name="Chris" হলে Name.$="Robert" এবং Score+20)
> var d = db.demo152.findAndModify({
... query: { id:102, Score: {$lt:50}, Name: "Chris" },
... update: { $set : {"Name.$": "Robert"}, $inc: {Score: 20 } }
... })
আপডেট পর পরিদর্শন
> db.demo152.find();
আউটপুট:
{ "_id" : ObjectId("5e3515bcfdf09dd6d08539dd"), "id" : 102, "Name" : [ "Robert", "David" ], "Score" : 65 }
{ "_id" : ObjectId("5e3515cafdf09dd6d08539de"), "id" : 103, "Name" : [ "Mike", "Carol" ], "Score" : 65 }
ব্যাখ্যা
query— ফিল্টার: id=102, Score<50, এবং অ্যারেতে "Chris" আছে।update—$set: {"Name.$": "Robert"}এখানে$পজিশনাল অপারেটর: কোয়ারিতে মিলা অ্যারে ইন্ডেক্সকে বোঝায় (এখানে ০)।$inc: {Score: 20}— Score ২০ বাড়িয়েছে।- ফলাফলে "Chris" → "Robert" এবং Score 45 → 65।
সুপারিশ: নতুন কোডে findOneAndUpdate() ব্যবহার করুন, এটি আরও ফ্লেক্সিবল (returnNewDocument অপশন আছে)।