Sử dụng $group trong Pipeline Aggregation
Để nhóm các bản ghi theo trường id và thu thập các tên liên quan, sử dụng hai giai đoạn $group kết hợp với $push.
Dữ liệu mẫu
> db.demo602.insertMany([
{ id: 1, Name: "Chris" },
{ id: 2, Name: "David" },
{ id: 1, Name: "Bob" },
{ id: 3, Name: "Mike" },
{ id: 2, Name: "John" },
{ id: 1, Name: "Sam" }
]);
Truy vấn Aggregation
db.demo602.aggregate([
{
$group: {
_id: { id: "$id", Name: "$Name" },
count: { $sum: 1 }
}
},
{
$group: {
_id: "$_id.id",
ListOfName: {
$push: { Name: "$_id.Name", Frequency: "$count" }
}
}
}
], { allowDiskUse: true });
Kết quả
{ "_id": 2, "ListOfName": [ { "Name": "John", "Frequency": 1 }, { "Name": "David", "Frequency": 1 } ] }
{ "_id": 3, "ListOfName": [ { "Name": "Mike", "Frequency": 1 } ] }
{ "_id": 1, "ListOfName": [ { "Name": "Sam", "Frequency": 1 }, { "Name": "Bob", "Frequency": 1 }, { "Name": "Chris", "Frequency": 1 } ] }
Kết quả cho thấy mỗi id duy nhất kèm theo mảng các tên và tần suất xuất hiện.