Jag upptäckte att kommandot $pull inte heller fungerar för mig om jag inte inkluderar återuppringningen i argumentlistan.
I min situation fungerade inte detta format:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Men det här formatet gjorde:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Enligt dokumentationen verkar det som om båda borde fungera, men gör det inte. Anledningen är att det första sättet kräver att du anropar .exec() på det returnerade objektet, medan callbackversionen anropar exec() automatiskt. Orsakade viss förvirring för mig också.
Så du måste göra något sånt här:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();