Wie Sie bemerkt haben, wird das Dokument nicht zurückgegeben, wenn Sie Folgendes verwenden:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Daher können Sie das Dokument nicht in ActionCtrl
speichern mit diesem Ansatz.
Sie können dasselbe Ergebnis mit Ihrem ursprünglichen Ansatz erzielen oder eine Form der Iteration verwenden. Eine Ablaufsteuerungsbibliothek wie async könnte sich als nützlich erweisen, um die asynchronen Aufrufe zu verarbeiten. Es wird Ihren Code nicht reduzieren, aber die Abfragen reduzieren. Siehe Beispiel:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Diese Antwort geht davon aus, dass ActionCtrl.saveRemove()
Die Implementierung kann ein einzelnes Dokument als Parameter annehmen und den Rückruf von async.each
ausführen Schleife. async.each
erfordert, dass am Ende jeder Iteration ein Callback ohne Argumente ausgeführt wird, also würden Sie dies idealerweise am Ende von .saveRemove()
ausführen
Beachten Sie, dass remove
-Methode für ein einzelnes Dokument gibt tatsächlich das entfernte Dokument zurück.