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

MongoDB Aggregation: Nhóm nhiều kết quả với $facet

Sử dụng $facet để chạy nhiều pipeline song song

$facet cho phép xử lý nhiều aggregation pipeline độc lập trên cùng một tập dữ liệu đầu vào, trả về kết quả nhiều nhóm trong một truy vấn.

Dữ liệu mẫu

> db.demo765.insertMany([
  { Name: "John", Category: "ComputerScience", SubjectName: "MongoDB", Marks: 75 },
  { Name: "John", Category: "ComputerScience", SubjectName: "MySQL", Marks: 85 },
  { Name: "Chris", Category: "10th", SubjectName: "Math", Marks: 98 }
]);

Truy vấn: Tổng điểm theo Name và theo Category

db.demo765.aggregate([
  {
    $facet: {
      ListOfName: [
        { $group: { _id: "$Name", Marks: { $sum: "$Marks" } } },
        { $project: { _id: false, Name: "$_id", Marks: 1 } }
      ],
      ListOfCategory: [
        { $group: { _id: "$Category", Marks: { $sum: "$Marks" } } },
        { $project: { _id: false, Category: "$_id", Marks: 1 } }
      ]
    }
  }
]).pretty()

Kết quả

{
  "ListOfName": [
    { "Marks": 98, "Name": "Chris" },
    { "Marks": 160, "Name": "John" }
  ],
  "ListOfCategory": [
    { "Marks": 98, "Category": "10th" },
    { "Marks": 160, "Category": "ComputerScience" }
  ]
}

Một truy vấn trả về cả tổng điểm theo học sinh và theo chuyên ngành.