sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose Najít a odebrat

Jak jste si všimli, použití následujícího nevrátí dokument:

Data.find(query).remove().exec(function(err, data) {
  // data will equal the number of docs removed, not the document itself
}

Proto nemůžete dokument uložit pomocí ActionCtrl pomocí tohoto přístupu.

Můžete dosáhnout stejného výsledku pomocí původního přístupu nebo použít nějakou formu iterace. Knihovna toku ovládacích prvků, jako je async může se hodit pro zpracování asynchronních hovorů. Nezmenší to váš kód, ale sníží počet dotazů. Viz příklad:

Data.find(query, function(err, data) {
  async.each(data, function(dataItem, callback) {
    dataItem.remove(function(err, result) {
      ActionCtrl.saveRemove(result, callback);
    });
  });
});

Tato odpověď předpokládá, že ActionCtrl.saveRemove() implementace může mít jako parametr individuální dokument a může provést zpětné volání z async.each smyčka. async.each vyžaduje, aby bylo na konci každé iterace spuštěno zpětné volání bez argumentů, takže toto byste v ideálním případě spustili na konci .saveRemove()

Všimněte si, že remove metoda na jednotlivém dokumentu skutečně vrátí dokument, který byl odstraněn.




  1. Meteor dynamicky filtruje rozevírací seznam, když je vybrán jiný rozevírací seznam

  2. Jak funguje ServiceStack Redis při získávání dat

  3. Jak uložit tabulku s konkrétním sloupcem by měla být uložena v poli a načíst ji v Angularjs (Mean Stack)

  4. Získání mongoStat prostřednictvím ovladače mongoDB Java