গভীর নেস্টেড অ্যারে থেকে নির্দিষ্ট শর্তমতো ডেটা বের করতে MongoDB-এ $elemMatch অপারেটর ব্যবহার করা হয়। একাধিক লেভেলের অ্যারে হলে নেস্টেড $elemMatch লাগে।
জটিল ডেটা তৈরি করা
> db.fetchingArrayValuesDemo.insertOne(
... {
... "StudentName": "David",
... "StudentDetails": [
... {
... "FatherName": "Bob",
... "CountryName": "US",
... "Favourite": [
... {
... "Teacher": "DAVID",
... "Subject": [ "MySQL", "MongoDB", "Java" ],
... "Marks": [ 50, 60, 65 ]
... }
... ]
... }
... ]
... } );
{ "acknowledged" : true, "insertedId" : ObjectId("5e06fc3425ddae1f53b621fa") }
> db.fetchingArrayValuesDemo.insertOne(
... {
... "StudentName": "Robert",
... "StudentDetails": [
... {
... "FatherName": "Sam",
... "CountryName": "AUS",
... "Favourite": [
... {
... "Teacher": "MIKE",
... "Subject": [ "Python", "C", "C++" ],
... "Marks": [ 76, 89, 91 ]
... }
... ]
... }
... ]
... } );
{ "acknowledged" : true, "insertedId" : ObjectId("5e06fc6825ddae1f53b621fb") }
সব ডকুমেন্ট দেখানো
> db.fetchingArrayValuesDemo.find();
নেস্টেড $elemMatch দিয়ে কোয়েরি: `Teacher: "DAVID"` যেটি মetch করে
> db.fetchingArrayValuesDemo.find({
... StudentDetails:{
... $elemMatch: {
... Favourite: {
... $elemMatch: {
... Teacher: "DAVID"
... }
... }
... }
... }
... });
ফলাফল (শুধু David-এর ডকুমেন্ট):
{ "_id" : ObjectId("5e06fc3425ddae1f53b621fa"), "StudentName" : "David", "StudentDetails" : [ { "FatherName" : "Bob", "CountryName" : "US", "Favourite" : [ { "Teacher" : "DAVID", "Subject" : [ "MySQL", "MongoDB", "Java" ], "Marks" : [ 50, 60, 65 ] } ] } ] }
ব্যাখ্যা: প্রথম $elemMatch `StudentDetails` অ্যারেতে সার্চ করে, দ্বিতীয়টি `Favourite` অ্যারেতে। এটি গভীর নেস্টেড স্ট্রাকচার কোয়েরির জন্য আবশ্যক।