MongoDB-এ অ্যারে ফিল্ডের ভিতরে থেকে একাধিক নির্দিষ্ট আইটেম বের করতে অ্যাগ্রিগেশন পাইপলাইনে $unwind, $match, $group ব্যবহার করা হয়।
নমুনা ডেটা তৈরি (UserDetails অ্যারে)
> db.retrieveMultipleDemo.insertOne({
"UserDetails": [
{"_id": "101", "UserName": "John", "UserAge": 23},
{"_id": "102", "UserName": "Carol", "UserAge": 21},
{"_id": "103", "UserName": "David", "UserAge": 23},
{"_id": "104", "UserName": "Sam", "UserAge": 25}
]
});
{ "acknowledged": true, "insertedId": ObjectId("5cd40c85edc6604c74817cf0") }
ডকুমেন্ট দেখুন
> db.retrieveMultipleDemo.find().pretty();আউটপুট:
{
"_id": ObjectId("5cd40c85edc6604c74817cf0"),
"UserDetails": [
{"_id": "101", "UserName": "John", "UserAge": 23},
{"_id": "102", "UserName": "Carol", "UserAge": 21},
{"_id": "103", "UserName": "David", "UserAge": 23},
{"_id": "104", "UserName": "Sam", "UserAge": 25}
]
}
অ্যাগ্রিগেশন: id 101,103 এবং UserAge=23 মэтচ করা এলিমেন্টগুলো বের করা
> var myIds = ["101", "103"];
> db.retrieveMultipleDemo.aggregate([
{$unwind: "$UserDetails"},
{$match: {"UserDetails._id": {$in: myIds}, "UserDetails.UserAge": 23}},
{$group: {"_id": "$_id", "UserDetails": {$push: "$UserDetails"}}},
{$project: {"_id": 0, "UserDetails": 1}}
]);
আউটপুট (John এবং David):
{
"UserDetails": [
{"_id": "101", "UserName": "John", "UserAge": 23},
{"_id": "103", "UserName": "David", "UserAge": 23}
]
}
পাইপলাইন ব্যাখ্যা:
$unwind: অ্যারে ফ্ল্যাট করে প্রতিটি এলিমেন্টকে আলাদা ডকুমেন্ট বানায়।$match: নির্দিষ্ট_idএবংUserAgeফিল্টার।$group: মূল ডকুমেন্টের_idদিয়ে গ্রুপ করে ফিল্টার্ড এলিমেন্টগুলো$pushদিয়ে আবার অ্যারে বানায়।$project: আউটপুট ফরম্যাট করুন।