MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да изтриете документи, върнати от заявка за агрегиране в mongodb

Отпремахването няма условие за заявка, което ще съпостави с всички документи и ще изтрие независимо от резултата от обобщаването.

Решение (съвпада с идентификаторите на текущия документ на курсора):

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 });
  });

Друго по-добро решение би било да има единично пътуване до db, докато изтриването е получаване на списък с идентификатори от агрегацията cursor() чрез 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. Най-лесният начин за конфигуриране на Embedded MongoDB

  2. Проектиране към друг тип с помощта на C# SDK

  3. Проблем с точността на времето при сравнение в драйвера на mongodb в Go и евентуално в друг език и друга база данни

  4. Как MongoDB прилага своите пространствени индекси?

  5. mongoDB има ли проблеми с повторното свързване или го правя погрешно?