নেস্টেড সাব-ডকুমেন্ট থেকে শর্তানুসারে ফিল্ড বের করতে অগরিগেশনে $unwind, $match এবং $project ব্যবহার করুন। একটি জটিল কালেকশন তৈরি করুন:
> db.demo671.insertOne({
"details" : [
{ "id" : "1" },
{ CountryName:"US", "details1" : [ { "id" : "1" }, { "id" : "2" } ] },
{ CountryName:"UK", "details1" : [ { "id" : "2" }, { "id" : "1" } ] },
{ CountryName:"AUS", "details1" : [ { "id" : "1" } ] }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3e5d004263e90dac943e0") }
find() দিয়ে ডকুমেন্ট দেখান:
> db.demo671.find();
আউটপুট:
details.details1.id == "1"শর্ত মেনে যাওয়া সাব-ডকুমেন্টেরCountryNameবের করার কোয়ারি:> db.demo671.aggregate([ {$unwind: '$details'}, {$match: {'details.details1.id': '1'}}, {$project: {_id: 0, Country: '$details.CountryName'}} ]).pretty()আউটপুট:
ব্যাখ্যা:
$unwind: '$details'টপ-লেভেল অ্যারে ফ্ল্যাট করে।$matchনেস্টেড পথdetails.details1.idদিয়ে ফিল্টার করে।$projectশুধুCountryNameফিল্ড (রিনেম করেCountry) আউটপুটে রাখে। প্রথম এলিমেন্ট ({id: "1"}) मेंdetails1নেই, তাই সেটি ফিল্টার আউট হয়েছে।