Jak zauważyłeś, użycie następujących nie spowoduje zwrócenia dokumentu:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
W związku z tym nie możesz zapisać dokumentu w ActionCtrl
stosując to podejście.
Możesz osiągnąć ten sam wynik, używając swojego oryginalnego podejścia lub użyj jakiejś formy iteracji. Biblioteka przepływu sterowania, taka jak async może się przydać do obsługi połączeń asynchronicznych. Nie zmniejszy to kodu, ale zmniejszy liczbę zapytań. Zobacz przykład:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Ta odpowiedź zakłada, że ActionCtrl.saveRemove()
implementacja może przyjąć pojedynczy dokument jako parametr i może wykonać wywołanie zwrotne z async.each
pętla. async.each
wymaga wywołania zwrotnego do uruchomienia bez argumentów na końcu każdej iteracji, więc najlepiej byłoby uruchomić to na końcu .saveRemove()
Zauważ, że remove
metoda na pojedynczym dokumencie faktycznie zwróci dokument, który został usunięty.