Ich habe festgestellt, dass der $pull-Befehl bei mir auch nicht funktioniert, es sei denn, ich füge den Callback in die Argumentliste ein.
In meiner Situation hat dieses Format nicht funktioniert:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Aber dieses Format tat es:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Laut Dokumentation sollten beide funktionieren, tun es aber nicht. Der Grund dafür ist, dass Sie bei der ersten Methode .exec() für das zurückgegebene Objekt aufrufen müssen, während die Callback-Version automatisch exec() aufruft. Hat bei mir auch etwas Verwirrung gestiftet.
Sie müssen also etwa so vorgehen:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();