Sử dụng aggregation: $unwind mảng, $match lọc, $group gom lại.
Tạo collection
> 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") }
Hiển thị tài liệu
> db.retrieveMultipleDemo.find().pretty();
Aggregation lấy các user có _id trong myIds VÀ UserAge = 23
> db.retrieveMultipleDemo.aggregate([
{ $unwind: "$UserDetails" },
{ $match: { "UserDetails._id": { $in: myIds }, "UserDetails.UserAge": 23 } },
{ $group: { "_id": "$_id", "UserDetails": { $push: "$UserDetails" } } },
{ $project: { "_id": 0, "UserDetails": 1 } }
]);
Kết quả (giả sử myIds chứa 101, 103):
{
"UserDetails": [
{ "_id": "101", "UserName": "John", "UserAge": 23 },
{ "_id": "103", "UserName": "David", "UserAge": 23 }
]
}
Lưu ý: Biến myIds cần được định nghĩa trước trong shell (ví dụ: var myIds = ["101", "103"]). Pipeline: unwind → match → group → project.