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

Cách xóa tài liệu được trả về bởi một truy vấn tổng hợp trong mongodb

Kể từ khi loại bỏ điều kiện truy vấn sẽ không khớp với tất cả các tài liệu và xóa bất kể kết quả tổng hợp.

Giải pháp (khớp với id của tài liệu con trỏ hiện tại):

db.getCollection("Collection")
  .aggregate([
    {
      $match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
    },
    {
      $project: {
        yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
      }
    },
    { $match: { yearMonthDay: { $eq: "2019-08-06" } } }
  ])
  .forEach(function(doc) {
    db.getCollection("Collection").remove({ "_id": doc._id });
  });

Một giải pháp tốt hơn sẽ có một chuyến đi khứ hồi đến db trong khi việc xóa sẽ nhận được danh sách id từ tập hợp cursor() qua cursor.map()

var idsList = db
  .getCollection("Collection")
  .aggregate([
    {
      $match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
    },
    {
      $project: {
        yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
      }
    },
    { $match: { yearMonthDay: { $eq: "2019-08-06" } } }
  ])
  .map(function(d) {
    return d._id;
  });

//now delete those documents via $in operator
db.getCollection("Collection").remove({ _id: { $in: idsList } });


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Có điều kiện bao gồm một trường (_id hoặc khác) trong tập hợp dự án mongodb?

  2. Cách kết nối với MySQL mà không cần mật khẩu gốc trên thiết bị đầu cuối

  3. MongDB không thể tìm thấy định nghĩa kiểu Promise

  4. Cách nhóm theo nhiều trường trong MongoDB khi một trường là trường ngày tháng

  5. Thứ tự Mongoid theo độ dài của mảng