MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tìm tất cả các tài liệu trùng lặp trong bộ sưu tập MongoDB theo trường khóa

Câu trả lời được chấp nhận rất chậm trên các bộ sưu tập lớn và không trả về _id các bản ghi trùng lặp.

Tổng hợp nhanh hơn nhiều và có thể trả về _id s:

db.collection.aggregate([
  { $group: {
    _id: { name: "$name" },   // replace `name` here twice
    uniqueIds: { $addToSet: "$_id" },
    count: { $sum: 1 } 
  } }, 
  { $match: { 
    count: { $gte: 2 } 
  } },
  { $sort : { count : -1} },
  { $limit : 10 }
]);

Trong giai đoạn đầu tiên của quy trình tổng hợp, $ groupoperator tổng hợp các tài liệu theo name trường và lưu trữ trong uniqueIds mỗi _id giá trị của các bản ghi được nhóm lại. Toán tử $ sum sẽ cộng các giá trị của các trường được chuyển đến nó, trong trường hợp này là hằng số 1 - do đó đếm số lượng bản ghi được nhóm vào count trường.

Trong giai đoạn thứ hai của quy trình, chúng tôi sử dụng $ matchto lọc các tài liệu có count trong số ít nhất 2, tức là các bản sao.

Sau đó, chúng tôi sắp xếp các bản sao thường xuyên nhất trước tiên và giới hạn các kết quả ở top 10.

Truy vấn này sẽ xuất ra tối đa $limit các bản ghi có tên trùng lặp, cùng với _id của chúng S. Ví dụ:

{
  "_id" : {
    "name" : "Toothpick"
},
  "uniqueIds" : [
    "xzuzJd2qatfJCSvkN",
    "9bpewBsKbrGBQexv4",
    "fi3Gscg9M64BQdArv",
  ],
  "count" : 3
},
{
  "_id" : {
    "name" : "Broom"
  },
  "uniqueIds" : [
    "3vwny3YEj2qBsmmhA",
    "gJeWGcuX6Wk69oFYD"
  ],
  "count" : 2
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. BsonSerializationException khi tuần tự hóa một Từ điển <DateTime, T> thành BSON

  2. Spring Boot và cách cấu hình chi tiết kết nối với MongoDB?

  3. mongodb tìm bằng cách so sánh các giá trị trường

  4. Không thể giải mã hóa PyMongo ObjectId từ JSON

  5. Spring Boot kết nối Mysql và MongoDb