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

Dùng MongoDB Aggregate và $group đếm tần suất tên

Để đếm tần suất (frequency) của giá trị trường, dùng $group với $sum: 1 trong aggregate pipeline.

Dữ liệu mẫu

> db.demo232.insertOne({_id:101,Name:"Chris"});
> db.demo232.insertOne({_id:102,Name:"Bob"});
> db.demo232.insertOne({_id:103,Name:"Bob"});
> db.demo232.insertOne({_id:104,Name:"David"});
> db.demo232.insertOne({_id:105,Name:"Chris"});

Pipeline aggregate đếm tần suất

> db.demo232.aggregate( { $group: { _id: "$Name", Frequency: { $sum: 1 } } } );

Kết quả

{ "_id" : "David", "Frequency" : 1 }
{ "_id" : "Bob", "Frequency" : 2 }
{ "_id" : "Chris", "Frequency" : 2 }

Giải thích:

  • _id: "$Name": Nhóm theo giá trị trường Name
  • Frequency: {$sum: 1}: Mỗi document trong nhóm cộng 1
  • Kết quả sắp xếp theo _id mặc định (alphabet cho string)

Mở rộng - Sắp xếp theo tần suất:

db.demo232.aggregate([
    { $group: { _id: "$Name", Frequency: { $sum: 1 } } },
    { $sort: { Frequency: -1 } }
]);

Kết quả: Bob(2), Chris(2), David(1).

Top N: Thêm {$limit: 5} sau $sort.

Phần trăm: Dùng $facet hoặc 2 pipeline để tính tổng rồi chia.