ডট নোটেশন দিয়ে গভীর পথ কুয়েরি
দুই লেভেল নেস্টেড অ্যারে (ডাবল নেস্টেড) -এ সার্চ করার জন্য ডট নোটেশন দিয়ে পথ নির্দিষ্ট করুন।
উদাহরণ: ডাবল নেস্টেড ডকুমেন্ট
> db.doubleNestedArrayDemo.insertOne({
"StudentId": "1000", "StudentName": "Larry",
"StudentDetails": [{
"ProjectName": "Online Banking",
"ProjectDetails": [
{ "TechnologyUsed": "Java" },
{ "TechnologyUsed": "MySQL in Backend" }
]
}]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c992bd7330fd0aa0d2fe4cc") }
> db.doubleNestedArrayDemo.insertOne({
"StudentId": "1001", "StudentName": "Robert",
"StudentDetails": [{
"ProjectName": "Student Web Tracker",
"ProjectDetails": [
{ "TechnologyUsed": "Django Framework" },
{ "TechnologyUsed": "MongoDB in Backend" }
]
}]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c992cdb330fd0aa0d2fe4cd") }
সার্চ: "Java" টেক্সট থাকা ডকুমেন্ট
> db.doubleNestedArrayDemo.find({
"StudentDetails.ProjectDetails.TechnologyUsed": "Java"
}).pretty();
আউটপুট: শুধু Larry-এর ডকুমেন্ট (যেখানে Java আছে)।
ব্যাখ্যা
MongoDB অটোমেটিক্যালি অ্যারে ট্রাভার্স করে: StudentDetails অ্যারে -> প্রতিটি এলিমেন্টের ProjectDetails অ্যারে -> প্রতিটি এলিমেন্টের TechnologyUsed ফিল্ড চেক করে।
রেগেক্স সার্চ ও সম্ভব:
db.doubleNestedArrayDemo.find({
"StudentDetails.ProjectDetails.TechnologyUsed": /Java/i
});
সীমাবদ্ধতা: শুধু ম্যাচ করা নেস্টেড এলিমেন্ট আলাদা করে পাওয়ার জন্য $elemMatch বা অগ리게েশন ($unwind) ব্যবহার করুন।