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.