Както отбелязахте, използването на следното няма да върне документа:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Поради това не можете да запазите документа в ActionCtrl
използвайки този подход.
Можете да постигнете същия резултат, като използвате оригиналния си подход или използвате някаква форма на итерация. Библиотека за контролен поток като async може да е полезно за обработка на асинхронните повиквания. Това няма да намали вашия код, но ще намали заявките. Вижте пример:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Този отговор предполага, че ActionCtrl.saveRemove()
внедряването може да вземе отделен документ като параметър и може да изпълни обратното извикване от async.each
цикъл. async.each
изисква обратно извикване да се изпълнява без аргументи в края на всяка итерация, така че в идеалния случай бихте изпълнили това в края на .saveRemove()
Имайте предвид, че remove
на отделен документ всъщност ще върне документа, който е бил премахнат.