สำหรับสิ่งนี้ ให้ใช้ $group ใน MongoDB IN aggregate() กลุ่ม $group ป้อนเอกสารโดยนิพจน์ _id ที่ระบุ และสำหรับการจัดกลุ่มที่แตกต่างกันแต่ละรายการ จะส่งออกเอกสาร ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo534.insertOne({_id:10,"ProductId":100,"ProductName":"Product-1"}); { "acknowledged" : true, "insertedId" : 10 } > db.demo534.insertOne({_id:11,"ProductId":100,"ProductName":"Product-2"}); { "acknowledged" : true, "insertedId" : 11 } > db.demo534.insertOne({_id:12,"ProductId":101,"ProductName":"Product-1"}); { "acknowledged" : true, "insertedId" : 12 }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo534.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : 10, "ProductId" : 100, "ProductName" : "Product-1" } { "_id" : 11, "ProductId" : 100, "ProductName" : "Product-2" } { "_id" : 12, "ProductId" : 101, "ProductName" : "Product-1" }
ต่อไปนี้เป็นแบบสอบถามที่จะใช้แบบสอบถามการจัดกลุ่มที่มีโครงสร้างใน MongoDB -
> db.demo534.aggregate( ... { ... $group: ... { ... _id: ... { ... productName: "$ProductName", ... productId: "$ProductId" ... }, ... count: ... { ... $sum: 1 ... } ... }, ... }, ... { ... $group: ... { ... _id: "$_id.productId", ... itemCounts: ... { ... "$push": ... { ... productName: "$_id.productName", ... count: "$count" ... } ... } ... } ... })
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : 101, "itemCounts" : [ { "productName" : "Product-1", "count" : 1 } ] } { "_id" : 100, "itemCounts" : [ { "productName" : "Product-2", "count" : 1 }, { "productName" : "Product-1", "count" : 1 } ] }