MongoDB-এ ডট (.) নোটেশন ব্যবহার করে গভীর নেস্টেড অবজেক্ট/অ্যারে কোয়েরি করা
MongoDB-এ একাধিক লেভেল নেস্টেড (Deeply Nested) অবজেক্ট বা অ্যারে থাকলে, সেখানে কোয়েরি করার জন্য ডট (.) নোটেশন ব্যবহার করে পাথ নির্দিষ্ট করা হয়। MongoDB অটোমেটিক্যালি নেস্টেড স্ট্রাকচার ট্রাভার্স করে।
১. জটিল নেস্টেড ডেটা সহ কালেকশন তৈরি
> db.demo350.insertOne({
id: 101, Name: "Chris",
details: [ { _id: 1, ClientNumber: "10001",
ClientDetails: [ { Name: "David", Age: 29 }, { Name: "Bob", Age: 31 } ] } ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e553a68f8647eb59e5620b8") }
> db.demo350.insertOne({
id: 102, Name: "David",
details: [ { _id: 2, ClientNumber: "10002",
ClientDetails: [ { Name: "Carol", Age: 42 }, { Name: "John", Age: 37 } ] } ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e553a8ff8647eb59e5620b9") }
২. সব ডকুমেন্ট দেখানো
> db.demo350.find();
আউটপুট:
{ "_id" : ObjectId("5e553a68f8647eb59e5620b8"), "id" : 101, "Name" : "Chris", "details" : [ { "_id" : 1, "ClientNumber" : "10001", "ClientDetails" : [ { "Name" : "David", "Age" : 29 }, { "Name" : "Bob", "Age" : 31 } ] } ] }
{ "_id" : ObjectId("5e553a8ff8647eb59e5620b9"), "id" : 102, "Name" : "David", "details" : [ { "_id" : 2, "ClientNumber" : "10002", "ClientDetails" : [ { "Name" : "Carol", "Age" : 42 }, { "Name" : "John", "Age" : 37 } ] } ] }
৩. গভীর নেস্টেড কোয়েরি: details.ClientDetails.Name = "John"
> db.demo350.find({"details.ClientDetails.Name": "John"});
৪. ফলাফল
{ "_id" : ObjectId("5e553a8ff8647eb59e5620b9"), "id" : 102, "Name" : "David", "details" : [ { "_id" : 2, "ClientNumber" : "10002", "ClientDetails" : [ { "Name" : "Carol", "Age" : 42 }, { "Name" : "John", "Age" : 37 } ] } ] }
কীভাবে কাজ করে:
details- টপ-লেভেল অ্যারে।ClientDetails- প্রতিটি details এলিমেন্টের ভেতরের অ্যারে।Name- ClientDetails অ্যারে-র প্রতিটি অবজেক্টের Name ফিল্ড।- MongoDB অটোমেটিক্যালি সব লেভেল ট্রাভার্স করে "John" খুঁজে বের করে।
নোট: এটি পুরো ডকুমেন্ট ফেরত দেয়। শুধু ম্যাচ করা নেস্টেড এলিমেন্ট চাইলে এগ্রিগেশনের $filter বা $elemMatch (প্রজেকশনে) ব্যবহার করতে হবে।