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

MongoDB aggregate นับจำนวนค่าฟิลด์ของชื่อซ้ำที่ตรงกัน


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

> db.demo558.insertOne( ... { ...    _id : 100, ...    CountryCode:101, ...    details: [ ...       { ...          Name:"Chris", ...          Subject:"MySQL" ...       }, ...       { ...          Name:"Chris", ...          Subject:"MongoDB" ...       }, ...       { ...          Name:"Chris", ...          Subject:"Java" ...       }, ...       { ...          Name:"Bob", ...          Subject:"Python" ...       }, ...       { ...          Name:"Bob", ...          Subject:"Java" ...       } ...    ] ... } ... ) { "acknowledged" : true, "insertedId" : 100 }

แสดงเอกสารทั้งหมดจากคอลเลกชันด้วยเมธอด find()

> db.demo558.find();

จะได้ผลลัพธ์ดังนี้

{ "_id" : 100, "CountryCode" : 101, "details" : [    { "Name" : "Chris", "Subject" : "MySQL" },    { "Name" : "Chris", "Subject" : "MongoDB" },    { "Name" : "Chris", "Subject" : "Java" },    { "Name" : "Bob", "Subject" : "Python" },    { "Name" : "Bob", "Subject" : "Java" } ] }

คำสั่งสำหรับหาจำนวน

> db.demo558.aggregate([ ...    {$unwind: "$details" }, ...    {$group: { _id: "$details.Name", NameCount:{$sum : 1}, Subject : {$push: "$details.Subject"}}}, ...    {$project: { NameCount: 1, SubjectCount : {$size: "$Subject"}}} ... ]).pretty()

จะได้ผลลัพธ์ดังนี้

{ "_id" : "Bob", "NameCount" : 2, "SubjectCount" : 2 } { "_id" : "Chris", "NameCount" : 3, "SubjectCount" : 3 }