MongoDB-এ পজিশনাল $ অপারেটর দিয়ে শর্তসাপেক্ষ অ্যারে আপডেট
যদি অ্যারেতে অবজেক্ট থাকে এবং নির্দিষ্ট শর্তে মিলা উপাদানের ভেতরের অ্যারেতে নতুন মান পুশ করতে হয়, তবে কোয়ারিতে পজিশনাল $ অপারেটর ব্যবহার করা হয়। এটি মিলা উপাদানের ইন্ডেক্সকে রিপ্রেজেন্ট করে।
উদাহরণ: ডেটা ইনসার্ট
> db.demo11.insertOne({"ListOfStudent":[{"StudentName":"Chris","ListOfScore":[76,67,54,89]}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0f6e34d7df943a7cec4fa1") }
প্রদর্শন
> db.demo11.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e0f6e34d7df943a7cec4fa1"), "ListOfStudent" : [ { "StudentName" : "Chris", "ListOfScore" : [ 76, 67, 54, 89 ] } ] }
শর্তসাপেক্ষ পুশ (StudentName="Chris" হলে ListOfScore-এ 98 যোগ)
> db.demo11.update( {"ListOfStudent.StudentName":"Chris"}, {$push:{"ListOfStudent.$.ListOfScore":98}} );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেট পর পরিদর্শন
> db.demo11.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e0f6e34d7df943a7cec4fa1"), "ListOfStudent" : [ { "StudentName" : "Chris", "ListOfScore" : [ 76, 67, 54, 89, 98 ] } ] }
ব্যাখ্যা
{"ListOfStudent.StudentName":"Chris"}— কোয়ারি:ListOfStudentঅ্যারেতে যেই উপাদানেStudentName="Chris"আছে।{$push:{"ListOfStudent.$.ListOfScore":98}}—$হলো পজিশনাল অপারেটর, কোয়ারিতে মিলা উপাদানের লোকেশন (ইন্ডেক্স ০)। সেটারListOfScoreঅ্যারেতে ৯৮ পুশ।- শুধু মিলা উপাদান আপডেট হয়, অন্যগুলো অপরিবর্তিত।
সীমাবদ্ধতা: $ শুধু এক লেভেল ডিপ কাজ করে (টপ-লেভেল অ্যারে)। নেস্টেড অ্যারেতে নেস্টেড অ্যারে আপডেট করতে arrayFilters (MongoDB 3.6+) ব্যবহার করুন।