MongoDB-এ একটি অ্যারে ফিল্ডে নির্দিষ্ট সব এলিমেন্ট আছে কিনা চেক করতে $all অপারেটর ব্যবহার করা হয়। $all সেই ডকুমেন্টগুলো সিলেক্ট করে যেখানে ফিল্ডটি একটি অ্যারে এবং নির্দিষ্ট সকল এলিমেন্টগুলো সেখানে আছে (অর্ডার এবং অতিরিক্ত এলিমেন্ট বিষয়ে চিন্তা করে না)।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo695.insertOne({ "ListOfValues": [100, 200, 500, 800] });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea6d4c4551299a9f98c938f") }
> db.demo695.insertOne({ "ListOfValues": [1000, 200, 4000] });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea6d4cf551299a9f98c9390") }
সব ডকুমেন্ট দেখানো
> db.demo695.find();
আউটপুট:
{ "_id" : ObjectId("5ea6d4c4551299a9f98c938f"), "ListOfValues" : [ 100, 200, 500, 800 ] }
{ "_id" : ObjectId("5ea6d4cf551299a9f98c9390"), "ListOfValues" : [ 1000, 200, 4000 ] }
$all দিয়ে [1000, 200, 4000] সবগুলো থাকা ডকুমেন্ট খোঁজা
> db.demo695.find({ "ListOfValues": { $all: [1000, 200, 4000] } });
আউটপুট
{ "_id" : ObjectId("5ea6d4cf551299a9f98c9390"), "ListOfValues" : [ 1000, 200, 4000 ] }
প্রথম ডকুমেন্টে ১০০০, ৪০০০ নেই, তাই ম্যাচ করেনি।
$all vs $in
| অপারেটর | ব্যবহার | উদাহরণ |
|---|---|---|
$all | সকল নির্দিষ্ট এলিমেন্ট থাকতে হবে (AND লজিক) | { tags: { $all: ["A", "B"] } } — A ও B দুটোই থাকবে |
$in | নির্দিষ্ট এলিমেন্টগুলোর যেকোনো একটি থাকলে হয় (OR লজিক) | { tags: { $in: ["A", "B"] } } — A বা B যেকোনো একটা থাকলে |
মূল পয়েন্টসমূহ
$allঅর্ডার বিবেচনা করে না।$all: [](খালি অ্যারে) সব ডকুমেন্ট ম্যাচ করবে (ভ্যাকুয়াম ট্রু)۔- অ্যারে ফিল্ডে ইন্ডেক্স থাকলে
$allইন্ডেক্স ব্যবহার করতে পারে (Multikey Index)۔ - অ্যারে নয় এমন ফিল্ডে
$allব্যবহার করলে ভুল দেবে না কিন্তু ম্যাচ করবে না। $elemMatchব্যবহার করুন যখন একই অ্যারে এলিমেন্টে একাধিক শর্ত লাগাতে হয়।