ใช้ $group ร่วมกับ $addToSet ใน Aggregate Framework เพื่อจัดกลุ่มเอกสารที่มีฟิลด์ร่วมกัน และรวมค่าที่ไม่ซ้ำเป็นอาร์เรย์ เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:
> db.findDocumentWithCommonFieldsDemo.insertOne({ "UserId":1, "UserName":"Carol" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51200") }
> db.findDocumentWithCommonFieldsDemo.insertOne({ "UserId":2, "UserName":"David" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51201") }
> db.findDocumentWithCommonFieldsDemo.insertOne({ "UserId":1, "UserName":"Sam" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cdf8ebebf3115999ed51202") }
แสดงเอกสาร (มี UserId = 1 อยู่ 2 เรคคอร์ด):
> db.findDocumentWithCommonFieldsDemo.find();
คิวรี่ Aggregate จัดกลุ่มตาม UserId และรวม UserName เป็นอาร์เรย์:
> db.findDocumentWithCommonFieldsDemo.aggregate({$group : {_id : "$UserId", "UserDetails": {$addToSet : "$UserName"}}});คำอธิบาย:
_id: "$UserId"- จัดกลุ่มตามค่า UserId$addToSet- รวมค่า UserName เป็นอาร์เรย์ ไม่ให้ซ้ำ (ใช้ $push หากต้องการค่าซ้ำ)- ผลลัพธ์: แต่ละกลุ่มมี _id = UserId และ UserDetails = อาร์เรย์ชื่อ