Tôi phát hiện ra rằng lệnh $ pull cũng không hoạt động với tôi trừ khi tôi đưa lệnh gọi lại vào danh sách đối số.
Trong trường hợp của tôi, định dạng này không hoạt động:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Nhưng định dạng này đã làm:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Theo tài liệu, có vẻ như cả hai đều hoạt động, nhưng không. Lý do là vì cách đầu tiên yêu cầu bạn gọi .exec () trên đối tượng được trả về, trong khi phiên bản gọi lại gọi thực thi () tự động. Cũng gây ra một số nhầm lẫn cho tôi.
Vì vậy, bạn cần phải làm điều gì đó như sau:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();