ใช้ $group และ $match หา Duplicate
รวมเอกสารตามฟิลด์เป้าหมาย นับจำนวน ($sum: 1) แล้วกรองที่มากกว่า 1
ตัวอย่างข้อมูล
สร้างคอลเลกชัน findAllNonDistinctDemo มี UserName ซ้ำ:
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":28});
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":21});
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":23});
> db.findAllNonDistinctDemo.insertOne({"UserName":"David","UserAge":22});
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":26});
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":24});
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":25});
> db.findAllNonDistinctDemo.insertOne({"UserName":"Mike","UserAge":29});
Aggregation หาค่าซ้ำ
> db.findAllNonDistinctDemo.aggregate([
{$group: {
_id: "$UserName",
Counter: {$sum: 1}
}},
{$match: {Counter: {$gt: 1}}}
]).pretty();
ผลลัพธ์:
{ "_id" : "Robert", "Counter" : 2 }
{ "_id" : "Larry", "Counter" : 2 }
{ "_id" : "John", "Counter" : 2 }
สามารถเพิ่ม $project เพื่อเปลี่ยนชื่อฟิลด์ หรือ $sort เรียงตามจำนวน