MongoDB-এ নেস্টেড JSON ডকুমেন্টের ভেতরের মান (inner value) এক্সেস করতে find() মেথডে ডট (.) নোটেশন ব্যবহার করা সবচেয়ে সহজ পদ্ধতি।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo235.insertOne({
... "id": 101,
... "details": [
... { "Name": "Chris Brown", "Age": 21 },
... { "Name": "David Miller", "Age": 24 }
... ],
... "otherdetails": [
... { "Score": 56, "Subject": "MongoDB" },
... { "Score": 78, "Subject": "MySQL" }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e418d22f4cebbeaebec514b") }
সব ডকুমেন্ট দেখানো
> db.demo235.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e418d22f4cebbeaebec514b"), "id" : 101, "details" : [ { "Name" : "Chris Brown", "Age" : 21 }, { "Name" : "David Miller", "Age" : 24 } ], "otherdetails" : [ { "Score" : 56, "Subject" : "MongoDB" }, { "Score" : 78, "Subject" : "MySQL" } ] }
JSON ডেটার ইনার ভ্যালু পাওয়ার কোয়ারী
find()-এর প্রজেকশন আর্গুমেন্টে ডট নোটেশন "otherdetails.Subject" ব্যবহার করা হয়েছে:
> db.demo235.find({}, {"otherdetails.Subject": 1, _id: 0});
ফলাফল
{ "otherdetails" : [ { "Subject" : "MongoDB" }, { "Subject" : "MySQL" } ] }
ব্যাখ্যা:
{}- ফিল্টার (সব ডকুমেন্ট){"otherdetails.Subject": 1, _id: 0}- প্রজেকশন: otherdetails অ্যারেতে প্রতিটি এলিমেন্টের Subject ফিল্ডই রাখবে, _id বাদ দেবে- MongoDB অটোমেটিক্যালি অ্যারেতে প্রতিটি এলিমেন্টে Subject এক্সট্রাক্ট করে
আরও ডট নোটেশন উদাহরণ:
"details.Name"- details অ্যারেতে সব Name"details.0.Name"- details অ্যারের প্রথম এলিমেন্টের Name"details.Age"- details অ্যারেতে সব Age
গভীর নেস্টেড এক্সেস (৩+ লেভেল):
db.collection.find({}, {"level1.level2.level3.field": 1})
অ্যাগ্রিগেশন বিকল্প (আরও কন্ট্রোলের জন্য):
db.demo235.aggregate([
{ $unwind: "$otherdetails" },
{ $project: { _id: 0, Subject: "$otherdetails.Subject" } }
])
// ফলাফল: { "Subject" : "MongoDB" }, { "Subject" : "MySQL" } (ফ্ল্যাট)
সতর্কতা: ডট নোটেশন প্রজেকশন অ্যারে স্ট্রাকচার রক্ষা করে। ফ্ল্যাট আউটপুট চাইলে $unwind ব্যবহার করুন।