Sử dụng $unwind, $match và $group
Để đếm số lần xuất hiện của một giá trị trong mảng lồng nhau, cần "bẻ mảng" ($unwind), lọc ($match) rồi nhóm đếm ($group).
Dữ liệu mẫu
> db.demo726.insertOne({
id: 101,
details: [
{ Name: "Chris" },
{ Name: "Chris" },
{ Name: "Bob" }
]
});
Truy vấn đếm
db.demo726.aggregate([
{ $unwind: "$details" },
{ $match: { "details.Name": "Chris" } },
{
$group: {
_id: "$details.Name",
Total_Value: { $sum: 1 }
}
}
]);
Kết quả
{ "_id": "Chris", "Total_Value": 2 }
Truy vấn trả về số lần tên "Chris" xuất hiện trong mảng details.