Zoals je hebt opgemerkt, zal het volgende document niet worden geretourneerd:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Als zodanig kunt u het document niet opslaan in ActionCtrl
deze benadering gebruiken.
U kunt hetzelfde resultaat bereiken met uw originele aanpak, of een of andere vorm van iteratie gebruiken. Een besturingsstroombibliotheek zoals async kan van pas komen om de asynchrone oproepen af te handelen. Het zal uw code niet verminderen, maar het aantal zoekopdrachten verminderen. Zie voorbeeld:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Dit antwoord gaat ervan uit dat de ActionCtrl.saveRemove()
implementatie kan een individueel document als parameter nemen en kan de callback uitvoeren vanaf de async.each
lus. async.each
vereist dat een callback wordt uitgevoerd zonder argumenten aan het einde van elke iteratie, dus u zou dit idealiter aan het einde van .saveRemove()
uitvoeren
Merk op dat de remove
methode op een individueel document zal het verwijderde document daadwerkelijk teruggeven.