ในการนับ คุณยังสามารถใช้ aggregate() ร่วมกับ $sum ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo184.insertOne({"Names":["Chris","David","Bob"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e3999fb9e4f06af55199805") } > db.demo184.insertOne({"Names":["Chris","Mike"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e399a0d9e4f06af55199806") } > db.demo184.insertOne({"Names":["Chris","Bob","Carol"]}); { "acknowledged" : true, "insertedId" : ObjectId("5e399a209e4f06af55199807") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo184.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e3999fb9e4f06af55199805"), "Names" : [ "Chris", "David", "Bob" ] } { "_id" : ObjectId("5e399a0d9e4f06af55199806"), "Names" : [ "Chris", "Mike" ] } { "_id" : ObjectId("5e399a209e4f06af55199807"), "Names" : [ "Chris", "Bob", "Carol" ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อนับความถี่ของทุกองค์ประกอบ -
> db.demo184.aggregate([ ... { "$unwind" : "$Names" }, ... { "$group": { "_id": "$Names", "count": { "$sum": 1} } }, ... { "$group": { ... "_id": null, ... "counts": { ... "$push": { ... "k": "$_id", ... "v": "$count" ... } ... } ... } }, ... { "$replaceRoot": { ... "newRoot": { "$arrayToObject": "$counts" } ... } } ...])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "Carol" : 1, "David" : 1, "Chris" : 3, "Bob" : 2, "Mike" : 1 }