Come hai notato, l'utilizzo di quanto segue non restituirà il documento:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Pertanto, non puoi salvare il documento in ActionCtrl
utilizzando questo approccio.
Puoi ottenere lo stesso risultato usando il tuo approccio originale o usare una qualche forma di iterazione. Una libreria del flusso di controllo come async potrebbe tornare utile per gestire le chiamate asincrone. Non ridurrà il tuo codice, ma ridurrà le query. Vedi esempio:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Questa risposta presuppone che ActionCtrl.saveRemove()
l'implementazione può prendere un singolo documento come parametro e può eseguire il callback da async.each
ciclo continuo. async.each
richiede che un callback venga eseguito senza argomenti alla fine di ogni iterazione, quindi idealmente dovresti eseguirlo alla fine di .saveRemove()
Nota che remove
metodo su un singolo documento restituirà effettivamente il documento che è stato rimosso.