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

pymongo:loại bỏ các bản sao (giảm bản đồ?)

Một phương pháp thay thế là sử dụng khung tổng hợp có hiệu suất tốt hơn so với giảm bản đồ. Hãy xem xét đường dẫn tổng hợp sau đây là giai đoạn đầu tiên của đường dẫn tổng hợp, $group toán tử nhóm các tài liệu theo ID và lưu trữ trong unique_ids mỗi trường _id giá trị của các bản ghi được nhóm bằng cách sử dụng mã <> $ addToSet nhà điều hành. $ sum toán tử bộ tích lũy cộng các giá trị của các trường được chuyển cho nó, trong trường hợp này là hằng số 1 - do đó đếm số bản ghi được nhóm vào trường đếm. Bước quy trình khác $ match lọc các tài liệu có số lượng ít nhất là 2, tức là các bản sao.

Khi bạn nhận được kết quả từ tổng hợp, bạn lặp lại con trỏ để loại bỏ _id đầu tiên trong unique_ids , sau đó đẩy phần còn lại vào một mảng sẽ được sử dụng sau này để xóa các phần trùng lặp (trừ một mục nhập):

cursor = db.coll.aggregate(
    [
        {"$group": {"_id": "$ID", "unique_ids": {"$addToSet": "$_id"}, "count": {"$sum": 1}}},
        {"$match": {"count": { "$gte": 2 }}}
    ]
)

response = []
for doc in cursor:
    del doc["unique_ids"][0]
    for id in doc["unique_ids"]:
        response.append(id)

coll.remove({"_id": {"$in": response}})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bạn sử dụng arrayFilters với mongoose 5.x.x như thế nào?

  2. MongoDB - Truy vấn một Bộ sưu tập

  3. Cách chuyển đổi một phần tử trong mảng trong mongoDB

  4. Kết nối với máy chủ mongodb từ bộ chứa docker

  5. Giá trị trả về của sao băng dưới dạng chuỗi