MongoDB-এ findOneAndUpdate() দিয়ে অ্যাটোমিক্যালি এক ডকুমেন্ট খুঁজে আপডেট করা
findOneAndUpdate() মেথড একটি ফিল্টার অনুযায়ী প্রথম মিলে যাওয়া ডকুমেন্ট খুঁজে বের করে, আপডেট করে, এবং ডিফল্টরূপে পুরানো (আপডেটের আগের) ডকুমেন্টটি ফেরত দেয়। এটি অ্যাটোমিক (Atomic) অপারেশন।
১. কালেকশন ও নমুনা ডেটা তৈরি
> db.demo328.insertOne({Name:"Chris",Marks:67});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b19f8647eb59e56207a") }
> db.demo328.insertOne({Name:"David",Marks:78});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b24f8647eb59e56207b") }
> db.demo328.insertOne({Name:"Bob",Marks:97});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b2bf8647eb59e56207c") }
২. আপডেটের আগে ডকুমেন্টগুলো
> db.demo328.find();
আউটপুট:
{ "_id" : ObjectId("5e516b19f8647eb59e56207a"), "Name" : "Chris", "Marks" : 67 }
{ "_id" : ObjectId("5e516b24f8647eb59e56207b"), "Name" : "David", "Marks" : 78 }
{ "_id" : ObjectId("5e516b2bf8647eb59e56207c"), "Name" : "Bob", "Marks" : 97 }
৩. findOneAndUpdate() দিয়ে David-এর Marks ১০ বাড়ানো
> db.demo328.findOneAndUpdate({Name:"David"},{ $inc: { "Marks" : 10 } });
{ "_id" : ObjectId("5e516b24f8647eb59e56207b"), "Name" : "David", "Marks" : 78 }
ব্যাখ্যা:
{Name:"David"}- ফিল্টার।{$inc: {"Marks": 10}}- Marks ফিল্ড ১০ বাড়ানো (ইনক্রিমেন্ট)।- রিটার্ন মান: আপডেটের পূর্বের ডকুমেন্ট (Marks: 78)।
৪. আপডেটের পর সব ডকুমেন্ট যাচাই
> db.demo328.find();
আউটপুট:
{ "_id" : ObjectId("5e516b19f8647eb59e56207a"), "Name" : "Chris", "Marks" : 67 }
{ "_id" : ObjectId("5e516b24f8647eb59e56207b"), "Name" : "David", "Marks" : 88 }
{ "_id" : ObjectId("5e516b2bf8647eb59e56207c"), "Name" : "Bob", "Marks" : 97 }
David-এর Marks 78 থেকে 88 হয়ে গেছে। findOneAndUpdate-এ returnDocument: "after" অপশন দিলে আপডেটের পরের ডকুমেন্ট ফেরত দেয়।