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

หาค่าซ้ำของฟิลด์ใน MongoDB ด้วย Aggregation

ใช้ $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 เรียงตามจำนวน