Như bạn đã lưu ý, việc sử dụng phần sau sẽ không trả lại tài liệu:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Do đó, bạn không thể lưu tài liệu trong ActionCtrl
bằng cách sử dụng phương pháp này.
Bạn có thể đạt được kết quả tương tự bằng cách sử dụng phương pháp ban đầu của mình hoặc sử dụng một số hình thức lặp lại. Thư viện luồng kiểm soát như async có thể hữu ích để xử lý các cuộc gọi không đồng bộ. Nó sẽ không làm giảm mã của bạn, nhưng sẽ giảm các truy vấn. Xem ví dụ:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Câu trả lời này giả định rằng ActionCtrl.saveRemove()
việc triển khai có thể lấy một tài liệu riêng lẻ làm tham số và có thể thực thi lệnh gọi lại từ async.each
vòng. async.each
yêu cầu một lệnh gọi lại được chạy mà không có đối số ở cuối mỗi lần lặp, vì vậy lý tưởng nhất là bạn nên chạy lệnh này ở cuối .saveRemove()
Lưu ý rằng remove
trên một tài liệu riêng lẻ sẽ thực sự trả về tài liệu đã bị xóa.