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

Tính tần suất tên trùng lặp từ trường NAME dùng MongoDB aggregate

Để tính tần suất (frequency) của các giá trị trùng lặp, sử dụng $group trong aggregate().

Tạo collection với tên trùng lặp

> db.demo635.insertOne({Name:"Chris"});
> db.demo635.insertOne({Name:"David"});
> db.demo635.insertOne({Name:"David"});
> db.demo635.insertOne({Name:"Chris"});
> db.demo635.insertOne({Name:"Bob"});
> db.demo635.insertOne({Name:"Chris"});

Hiển thị dữ liệu gốc

> db.demo635.find();

Kết quả (6 document):

{ "Name" : "Chris" }, { "Name" : "David" }, { "Name" : "David" },
{ "Name" : "Chris" }, { "Name" : "Bob" }, { "Name" : "Chris" }

Aggregate tính tần suất

> db.demo635.aggregate([
  { $unwind: "$Name" },
  { $group: { "_id": "$Name", TotalFrequency: { $sum: 1 } } }
]);

Kết quả:

{
  "_id" : "David", "TotalFrequency" : 2
}
{
  "_id" : "Bob", "TotalFrequency" : 1
}
{
  "_id" : "Chris", "TotalFrequency" : 3
}

Giải thích:

  • $unwind: "$Name": Ở đây Name là chuỗi (không phải mảng), $unwind vẫn hoạt động - nó giữ nguyên document (tương đương không làm gì). Lưu ý: Nếu Name là mảng thì $unwind sẽ phân rã thành nhiều document.
  • $group: Gom theo Name, $sum: 1 đếm số lần xuất hiện
  • Kết quả sắp xếp theo thứ tự alphabet của _id

Đây là pattern chuẩn cho bài toán "word count" hoặc thống kê tần suất giá trị.