sql >> Database >  >> NoSQL >> MongoDB

Hoe documenten te verwijderen die zijn geretourneerd door een aggregatiequery in mongodb

Sinds de verwijderen heeft geen queryvoorwaarde, deze komt overeen met alle documenten en wordt verwijderd, ongeacht het aggregatieresultaat.

Oplossing (kom overeen met de id's van het huidige cursordocument):

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

Nog een betere oplossing zou zijn om een ​​enkele retour naar db te hebben, terwijl het verwijderen een lijst met id's is van de aggregatie cursor() via 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. Django - MongoDB:(kon geen verbinding maken met localhost:27017) Verbinding geweigerd

  2. MongoDB verwerkt geen aggregatie met allowDiskUsage:True

  3. c# mongodb-stuurprogramma hoe een mongo dubbele waarde naar een c# decimale waarde te casten

  4. MongoDB stelt limiet in op $inc