Để gom nhóm (merge) các trường giá trị giống nhau và đếm tần suất, sử dụng $group với $sum và $sort trong aggregate.
Tạo collection chủ đề
> db.demo647.insertOne({"Subject":"MySQL"});
> db.demo647.insertOne({"Subject":"MongoDB"});
> db.demo647.insertOne({"Subject":"MySQL"});
> db.demo647.insertOne({"Subject":"SQL Server"});
> db.demo647.insertOne({"Subject":"MongoDB"});
> db.demo647.insertOne({"Subject":"PL/SQL"});
> db.demo647.insertOne({"Subject":"MongoDB"});
Hiển thị dữ liệu (7 document)
> db.demo647.find();
Kết quả: MySQL(2), MongoDB(3), SQL Server(1), PL/SQL(1)
Aggregate group by Subject, count, sort desc, limit top 2
> db.demo647.aggregate([
{ "$group": { "_id": "$Subject", "COUNT": { "$sum": 1 } } },
{ "$sort": { "COUNT": -1 } },
{ "$limit": 2 }
]);
Kết quả (Top 2 chủ đề phổ biến nhất):
{
"_id" : "MongoDB", "COUNT" : 3
}
{
"_id" : "MySQL", "COUNT" : 2
}
Giải thích pipeline:
$group: Gom theoSubject,$sum: 1đếm số lần xuất hiện$sort: {COUNT: -1}: Sắp xếp giảm dần theo COUNT$limit: 2: Chỉ lấy 2 document đầu (Top 2)
Mở rộng: Có thể thêm stage $project để đổi tên trường:
{ $project: { _id: 0, Subject: "$_id", Count: "$COUNT" } }
Kết quả: { "Subject": "MongoDB", "Count": 3 }
Pattern này dùng cho: Top selling products, Most active users, Popular tags, Error frequency analysis...