Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

คิวรี MongoDB สำหรับการใช้งานฟังก์ชันรวม (Aggregate)


การสร้างคอลเลกชันพร้อมเอกสารตัวอย่าง

ขั้นแรก เราจะสร้างคอลเลกชันชื่อ demo121 พร้อมเอกสารที่มีโครงสร้างแบบฝัง (nested) ดังนี้:

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

แสดงเอกสารทั้งหมดด้วย find()

> db.demo121.find();

ผลลัพธ์ที่ได้:

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

คิวรี Aggregate สำหรับจัดกลุ่มและนับจำนวน

คิวรีต่อไปนี้ใช้ pipeline ประกอบด้วย $match, $unwind, และ $group สองครั้ง เพื่อจัดกลุ่มตาม SubjectId และรวบรวม SubjectName:

> 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);
});

ผลลัพธ์จากการรัน Aggregate

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