Sử dụng $unwind nhiều lần và $match
Để truy vấn sâu vào mảng lồng nhau nhiều cấp, cần $unwind từng cấp rồi $match điều kiện.
Dữ liệu mẫu (3 cấp lồng nhau)
> db.demo736.insertMany([
{
_id: "101",
details1: [{ details2: [{ details3: { Name: "John" } }] }]
},
{
_id: "102",
details1: [{ details2: [{ details3: { Name: "Robert" } }] }]
}
]);
Truy vấn lọc Name = "Robert"
db.demo736.aggregate([
{ $unwind: "$details1" },
{ $unwind: "$details1.details2" },
{ $match: { "details1.details2.details3.Name": "Robert" } },
{ $project: { _id: 0, Name: "$details1.details2.details3" } }
]);
Kết quả
{ "Name": { "Name": "Robert" } }
Kỹ thuật này áp dụng cho cấu trúc dữ liệu lồng nhau tùy ý độ sâu.