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

Truy vấn MongoDB để thực hiện hàm tổng hợp (aggregate)

Đầu tiên, hãy tạo một collection với các document như sau:

> db.demo121.insertOne(
   {
      "Id" : 101,
      "Details" : [
         {
            "SubjectId" : "1",
            "SubjectName" : "MongoDB",
            "Score" : 76
         },
         {
            "SubjectId" : "2",
            "SubjectName" : "MySQL",
            "Score" : 76
         },
         {
            "SubjectId" : "3",
            "SubjectName" : "Java",
            "Score" : 76
         }
      ]
   }
);

Hiển thị tất cả document trong collection bằng phương thức find():

> db.demo121.find();

Kết quả đầu ra:

{
   "_id" : ObjectId("5e2f1c60140daf4c2a3544b3"),
   "Id" : 101,
   "Details" : [
      { "SubjectId" : "1", "SubjectName" : "MongoDB", "Score" : 76 },
      { "SubjectId" : "2", "SubjectName" : "MySQL", "Score" : 76 },
      { "SubjectId" : "3", "SubjectName" : "Java", "Score" : 76 }
   ]
}

Truy vấn dưới đây sử dụng pipeline aggregate để nhóm dữ liệu theo SubjectId và thu thập tên môn học:

> db.demo121.aggregate([
   { "$match": { "Id": 101 } },
   { "$unwind": "$Details" },
   {
      "$group": {
         "_id": "$Details.SubjectId",
         "count": { "$sum": 1 },
         "Details": {
            "$push": {
               "SubjectName": "$Details.SubjectName"
            }
         }
      }
   },
   {
      "$group": {
         "_id": null,
         "List": {
            "$push": {
               "SubId": "$_id",
               "Details": "$Details"
            }
         }
      }
   }
], function (err, out) {
   res.json(out);
});

Kết quả đầu ra:

{
   "_id" : null,
   "List" : [
      { "SubId" : "3", "Details" : [ { "SubjectName" : "Java" } ] },
      { "SubId" : "2", "Details" : [ { "SubjectName" : "MySQL" } ] },
      { "SubId" : "1", "Details" : [ { "SubjectName" : "MongoDB" } ] }
   ]
}