পজিশনাল $ অপারেটর ব্যবহার
নেস্টেড অ্যারে-র নির্দিষ্ট এলিমেন্ট আপডেট করার জন্য কুয়েরিতে ম্যাচ করা এলিমেন্টের পজিশন রেফার করতে $ (পজিশনাল অপারেটর) ব্যবহার করা হয়।
উদাহরণ: নেস্টেড অ্যারে সহ ডকুমেন্ট
> db.incrementInNestedArrayDemo.insertOne({
"StudentId": 100,
"ProjectDetails": [
{ "ProjectId": 567778888, "TeamSize": 4 },
{ "ProjectId": 67888999, "TeamSize": 2 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9a6b7b15e86fd1496b38aa") }
ProjectId: 67888999 এর TeamSize ১ বাড়ানো
> db.incrementInNestedArrayDemo.update(
{ "StudentId": 100, "ProjectDetails.ProjectId": 67888999 },
{ $inc: { "ProjectDetails.$.TeamSize": 1 } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ফাইনাল ডেটা
> db.incrementInNestedArrayDemo.find().pretty();
আউটপুট:
{ "ProjectId": 567778888, "TeamSize": 4 }
{ "ProjectId": 67888999, "TeamSize": 3 } // 2 -> 3 হয়েছে
ব্যাখ্যা
- কুয়েরি:
ProjectDetails.ProjectId: 67888999- অ্যারেতে এই ফিল্ড ম্যাচ করালো - আপডেট:
ProjectDetails.$.TeamSize-$ম্যাচ করা এলিমেন্টকে রেফার করে $inc- ইনক্রিমেন্ট করে
সীমাবদ্ধতা: শুধু প্রথম ম্যাচ করা এলিমেন্ট আপডেট হয়। একাধিক ম্যাচ হলে সব আপডেট করতে arrayFilters (MongoDB 3.6+) ব্যবহার করুন।