Som du har noterat kommer inte dokumentet att returneras om du använder följande:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Som sådan kan du inte spara dokumentet i ActionCtrl
med detta tillvägagångssätt.
Du kan uppnå samma resultat med ditt ursprungliga tillvägagångssätt, eller använda någon form av iteration. Ett kontrollflödesbibliotek som async kan vara praktiskt för att hantera asynkrona samtal. Det kommer inte att minska din kod, men kommer att minska frågorna. Se exempel:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Detta svar förutsätter att ActionCtrl.saveRemove()
implementering kan ta ett enskilt dokument som en parameter och kan utföra återuppringningen från async.each
slinga. async.each
kräver att en återuppringning körs utan argument i slutet av varje iteration, så du skulle helst köra detta i slutet av .saveRemove()
Observera att remove
metod på ett enskilt dokument kommer faktiskt att returnera dokumentet som har tagits bort.