MongoDB-এ নেস্ট করা অ্যারেতে ডকুমেন্ট খুঁজে বের করতে $and অপারেটর ব্যবহারের বদলে $in অপারেটর ব্যবহার করা আরও কার্যকর এবং সহজ।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo83.insertOne({
... "Details":[
... {
... "Name":"Chris",
... "Subject":["MySQL", "MongoDB"]
... },
... {
... "Name":"David",
... "Subject":["Java", "C"]
... }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bfd2271bf0181ecc422a3") }
> db.demo83.insertOne({
... "Details":[
... {
... "Name":"Bob",
... "Subject":["C++", "Python"]
... },
... {
... "Name":"John",
... "Subject":["Spring", "Hibernate"]
... }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bfd4571bf0181ecc422a4") }
সব ডকুমেন্ট দেখানো
> db.demo83.find();
আউটপুট:
{ "_id" : ObjectId("5e2bfd2271bf0181ecc422a3"), "Details" : [ { "Name" : "Chris", "Subject" : [ "MySQL", "MongoDB" ] }, { "Name" : "David", "Subject" : [ "Java", "C" ] } ] }
{ "_id" : ObjectId("5e2bfd4571bf0181ecc422a4"), "Details" : [ { "Name" : "Bob", "Subject" : [ "C++", "Python" ] }, { "Name" : "John", "Subject" : [ "Spring", "Hibernate" ] } ] }
$in ব্যবহার করে কোয়ারি
$elemMatch এর ভেতরে $in ব্যবহার করে "Chris" নাম এবং "MongoDB" সাবজেক্ট দুটি শর্ত মিলানো হয়েছে:
> db.demo83.find({
... "Details" : {
... "$elemMatch" : {
... "Name" : "Chris",
... "Subject" : { "$in" : ["MongoDB"] }
... }
... }
... });
ফলাফল
{ "_id" : ObjectId("5e2bfd2271bf0181ecc422a3"), "Details" : [ { "Name" : "Chris", "Subject" : [ "MySQL", "MongoDB" ] }, { "Name" : "David", "Subject" : [ "Java", "C" ] } ] }
ব্যাখ্যা: কোয়ারীটি পুরো ডকুমেন্ট রিটার্ন করে যাতে Details অ্যারেতে কমপক্ষে একটি এলিমেন্টে Name: "Chris" এবং Subject অ্যারেতে "MongoDB" থাকে।
নোট: $in অপারেটর অ্যারেতে কোনো মান আছে কিনা চেক করতে খুব দ্রুত এবং পঠনযোগ্য। একাধিক মান চেক করতে হলে {$in: ["MongoDB", "MySQL"]}这种写法也可以使用。