Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB Aggregation: Gom nhóm, hợp nhất trường và đếm

Để 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:

  1. $group: Gom theo Subject, $sum: 1 đếm số lần xuất hiện
  2. $sort: {COUNT: -1}: Sắp xếp giảm dần theo COUNT
  3. $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...