Sử dụng Aggregation Framework với $group, $match, $project để tìm các giá trị trùng lặp.
Ví dụ minh họa
Tạo collection findDuplicateRecordsDemo:
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "John"});
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "John"});
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "Carol"});
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "Sam"});
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "Carol"});
> db.findDuplicateRecordsDemo.insertOne({"HoTenSinhVien": "Mike"});
Truy vấn aggregation
> db.findDuplicateRecordsDemo.aggregate([
{$group: {_id: "$HoTenSinhVien", dem: {$sum: 1}}},
{$match: {_id: {$ne: null}, dem: {$gt: 1}}},
{$project: {HoTenSinhVien: "$_id", _id: 0}}
]);
Kết quả:
{ "HoTenSinhVien": "Carol" }
{ "HoTenSinhVien": "John" }
Giải thích:
$group: Nhóm theoHoTenSinhVien, đếm số lần xuất hiện$match: Lọc nhóm có count > 1 (và _id không null)$project: Định dạng lại output
Mở rộng: Thêm $addToSet: "$_id" vào $group để lấy danh sách _id của các document trùng.