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

หาค่าที่ไม่ซ้ำกัน (Distinct) ของอาร์เรย์ใน MongoDB ด้วย $addToSet

เพื่อหาค่าที่ไม่ซ้ำกัน (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 ก่อน