MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak usunąć dokumenty zwrócone przez zapytanie agregujące w mongodb

Od usunięcia nie ma warunku zapytania, który zostanie dopasowany do wszystkich dokumentów i usunięty niezależnie od wyniku agregacji.

Rozwiązanie (dopasuj identyfikatory bieżącego dokumentu kursora):

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

Kolejne lepsze rozwiązanie byłoby mieć pojedynczą podróż w obie strony do bazy danych, podczas gdy usuwanie polega na pobraniu listy identyfikatorów z agregacji cursor() przez 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. MongoDB:Wstawianie zbiorcze (Bulk.insert) a wstawianie wielu (insert([...]))

  2. Czy istnieje sposób na zmuszenie mongodb do przechowywania określonego indeksu w pamięci RAM?

  3. Mongo nie posiada funkcji max(), jak mam to obejść?

  4. Chcę wynik z odrębną wartością jednego pola z mongodb przy użyciu danych wiosennych

  5. mgo time.Czas lub kontrola logiczna