ใช้ Aggregate Framework พร้อม $group, $sum, $match, $project เพื่อหาเอกสารที่มีค่าซ้ำในฟิลด์ที่กำหนด
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน findDuplicateRecordsDemo:
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a330293b406bd3df60e01") }
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a330493b406bd3df60e02") }
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"Carol"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a330c93b406bd3df60e03") }
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a331093b406bd3df60e04") }
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"Carol"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a331593b406bd3df60e05") }
> db.findDuplicateRecordsDemo.insertOne({"StudentFirstName":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8a331e93b406bd3df60e06") }
แสดงข้อมูล:
> db.findDuplicateRecordsDemo.find();
{"_id" : ObjectId("5c8a330293b406bd3df60e01"), "StudentFirstName" : "John" }
{"_id" : ObjectId("5c8a330493b406bd3df60e02"), "StudentFirstName" : "John" }
{"_id" : ObjectId("5c8a330c93b406bd3df60e03"), "StudentFirstName" : "Carol" }
{"_id" : ObjectId("5c8a331093b406bd3df60e04"), "StudentFirstName" : "Sam" }
{"_id" : ObjectId("5c8a331593b406bd3df60e05"), "StudentFirstName" : "Carol" }
{"_id" : ObjectId("5c8a331e93b406bd3df60e06"), "StudentFirstName" : "Mike" }
คำสั่ง Aggregate หาชื่อที่ซ้ำ:
> db.findDuplicateRecordsDemo.aggregate(
... {"$group" : {"_id": "$StudentFirstName", "count": {"$sum": 1} }},
... {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} }},
... {"$project": {"StudentFirstName" : "$_id", "_id" : 0} }
... );
{"StudentFirstName" : "Carol" }
{"StudentFirstName" : "John" }
ผลลัพธ์แสดงเฉพาะชื่อที่ปรากฏมากกว่า 1 ครั้ง (Carol และ John)