ในการเลือกเอกสารที่จัดกลุ่มตามฟิลด์ใน MongoDB ให้ใช้ $group พร้อมกับ $project ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"US"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca368ef4dcbee04fbbc0e") } > db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"UK"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca36bef4dcbee04fbbc0f") } > db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"AUS"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca370ef4dcbee04fbbc10") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo540.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e8ca368ef4dcbee04fbbc0e"), "id" : 1, "Name" : "Chris", "CountryName" : "US" } { "_id" : ObjectId("5e8ca36bef4dcbee04fbbc0f"), "id" : 1, "Name" : "Chris", "CountryName" : "UK" } { "_id" : ObjectId("5e8ca370ef4dcbee04fbbc10"), "id" : 1, "Name" : "Chris", "CountryName" : "AUS" }
ต่อไปนี้เป็นแบบสอบถามเพื่อเลือกเอกสารที่จัดกลุ่มตามฟิลด์ -
> var query= [ ... { ... "$group": { ... "_id": { ... "id": "$id", ... "Name": "$Name" ... }, ... "details": { ... "$push": { ... ... "CountryName": "$CountryName" ... ... } ... } ... } ... }, ... { ... "$project": { ... "_id": "$_id.id", ... "Name": "$_id.Name", ... "details": 1 ... } ... } ... ]; > db.demo540.aggregate(q).pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "details" : [ { "Name" : "Chris", "CountryName" : "US" }, { "Name" : "Chris", "CountryName" : "UK" }, { "Name" : "Chris", "CountryName" : "AUS" } ], "_id" : 1, "Name" : "Chris" }