J'ai découvert que la commande $pull ne fonctionnait pas pour moi non plus à moins que j'inclue le rappel dans la liste des arguments.
Dans ma situation, ce format ne fonctionnait pas :
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Mais ce format a fait :
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Selon la documentation, il semble que les deux devraient fonctionner, mais ce n'est pas le cas. La raison en est que la première méthode nécessite que vous appeliez .exec() sur l'objet renvoyé, alors que la version de rappel appelle exec() automatiquement. Cela m'a aussi causé de la confusion.
Vous devez donc faire quelque chose comme ceci :
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();