MongoDB-এ $all অপারেটর ব্যবহার করে অর্ডার-ইনডিপেন্ডেন্ট অ্যারে ম্যাচিং
$all অপারেটর অ্যারে ফিল্ডে নির্দিষ্ট সব এলিমেন্ট আছে কিনা চেক করে, অর্ডার বা পজিশন বিবেচনা করে না। এটি নেস্টেড অবজেক্ট অ্যারেতেও কাজ করে।
উদাহরণ: নেস্টেড ডিটেইলস সহ ডকুমেন্ট তৈরি
> db.demo370.insertOne({ "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9892ae06a1609a00af0") }
> db.demo370.insertOne({ "Name" : "David", "details" : [ { "Subject" : "Java", "CountryName" : "AUS" }, { "Subject" : "Spring", "CountryName" : "UK" } ] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9972ae06a1609a00af1") }
সমস্ত ডকুমেন্ট
> db.demo370.find();
{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }
{ "_id" : ObjectId("5e57e9972ae06a1609a00af1"), "Name" : "David", "details" : [ { "Subject" : "Java", "CountryName" : "AUS" }, { "Subject" : "Spring", "CountryName" : "UK" } ] }
$all ব্যবহার করে কুয়েরি: উভয় অবজেক্ট থাকা ডকুমেন্ট খুঁজে বের করা
> db.demo370.find({
details: {$all: [
{Subject:"MySQL","CountryName" : "US"},
{Subject:"MongoDB", "CountryName" : "UK"}
]}
})
ফলাফল
{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }
ব্যাখ্যা
$allনিশ্চিত করে যেdetailsঅ্যারেতে উভয় অবজেক্টই আছে, অর্ডার নির্বিশেষে।- প্রথম ডকুমেন্টে উভয় অবজেক্ট আছে, তাই ম্যাচ করল।
- দ্বিতীয় ডকুমেন্টে "MySQL"/"US" নেই, তাই বাদ পড়ল।
সাধারণ অ্যারে (স্ট্রিং/নাম্বার) উদাহরণ
db.collection.find({ tags: { $all: ["mongodb", "database", "nosql"] } })
এই কুেরি "mongodb", "database", "nosql" তিনটি ট্যাগ সব থাকা ডকুমেন্ট খুঁজে বের করবে।