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

Tìm giá trị không distinct (trùng lặp) của trường trong MongoDB

Để tìm các giá trị xuất hiện nhiều lần (non-distinct) của một trường, dùng Aggregation Pipeline với $group và $match.

Ví dụ: Collection findAllNonDistinctDemo:

> 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 pipeline:

> db.findAllNonDistinctDemo.aggregate([
    { $group: { _id: "$UserName", Counter: { $sum: 1 } } },
    { $match: { Counter: { $gt: 1 } } }
]).pretty();

Kết quả:

{ "_id" : "Robert", "Counter" : 2 }
{ "_id" : "Larry", "Counter" : 2 }
{ "_id" : "John", "Counter" : 2 }

Giải thích:

  • $group: Nhóm theo UserName, đếm số lần xuất hiện (Counter).
  • $match: Lọc các nhóm có Counter > 1 (xuất hiện >= 2 lần).

Cách này cho biết giá trị nào bị trùng và số lần trùng.