Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tìm document trùng lặp theo trường khóa trong MongoDB

Sử dụng Aggregation Framework với $group, $match, $sort để tìm document trùng lặp theo trường khóa.

Ví dụ minh họa

Tạo collection findDuplicateByKeyDemo:

> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 1, "TenSinhVien": "John"});
> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 2, "TenSinhVien": "Carol"});
> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 3, "TenSinhVien": "Carol"});
> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 4, "TenSinhVien": "John"});
> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 5, "TenSinhVien": "Sam"});
> db.findDuplicateByKeyDemo.insertOne({"MaSinhVien": 6, "TenSinhVien": "Carol"});

Truy vấn aggregation

> db.findDuplicateByKeyDemo.aggregate([
  {$group: {
    _id: {TenSinhVien: "$TenSinhVien"},
    CacId: {$addToSet: "$_id"},
    Dem: {$sum: 1}
  }},
  {$match: {Dem: {$gte: 2}}},
  {$sort: {Dem: -1}},
  {$limit: 10}
]).pretty();

Kết quả:

{ "_id": {"TenSinhVien": "Carol"}, "CacId": [ObjectId("..."), ObjectId("..."), ObjectId("...")], "Dem": 3 }
{ "_id": {"TenSinhVien": "John"}, "CacId": [ObjectId("..."), ObjectId("...")], "Dem": 2 }

Giải thích: Nhóm theo TenSinhVien, thu thập _id ($addToSet), đếm ($sum: 1), lọc nhóm có đếm ≥ 2, sắp xếp giảm dần, giới hạn 10.