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

Tổng hợp (Aggregation) các phần tử có ID tương tự trong các bản ghi MongoDB khác nhau

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.