เพื่อหาค่าที่ไม่ซ้ำกัน (Distinct Values) ของฟิลด์ที่เป็นอาร์เรย์ ให้ใช้ $addToSet ใน Stage $group ของ MongoDB Aggregation
สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ ListOfValues:
> db.demo122.insertOne({"ListOfValues":[100,10]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f20f1140daf4c2a3544b6") }
> db.demo122.insertOne({"ListOfValues":[240,10]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f20f7140daf4c2a3544b7") }
แสดงเอกสารทั้งหมด:
> db.demo122.find();
ผลลัพธ์ - ทั้งคู่มีค่า 10 ซ้ำกัน:
คำสั่ง Aggregation: $group ด้วย _id: 0 (จัดกลุ่มทั้งหมด) และ $addToSet เก็บอาร์เรย์ ListOfValues ทั้งหมด (ไม่แยกองค์ประกอบ):
> db.demo122.aggregate([ ... { "$group": { ... "_id": 0, ... "ListOfValues": { "$addToSet": "$ListOfValues" } ... } } ... ])ผลลัพธ์ - ได้อาร์เรย์ของอาร์เรย์: [[240,10], [100,10]] (ค่าอาร์เรย์ทั้งหมดที่ไม่ซ้ำกันในระดับเอกสาร):
หมายเหตุ: $addToSet ในที่นี้เก็บอาร์เรย์ทั้งชุดเป็นค่าเดียว ไม่ได้แยกองค์ประกอบภายในอาร์เรย์ หากต้องการค่า Distinct ขององค์ประกอบภายในอาร์เรย์ ต้องใช้ $unwind ก่อน