Ho scoperto che anche il comando $pull non funziona per me a meno che non includa il callback nell'elenco degli argomenti.
Nella mia situazione, questo formato non ha funzionato:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Ma questo formato ha fatto:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Secondo la documentazione, sembra che entrambi dovrebbero funzionare, ma non è così. Il motivo è perché il primo modo richiede di chiamare .exec() sull'oggetto restituito, mentre la versione di callback chiama exec() automaticamente. Ha causato un po' di confusione anche a me.
Quindi devi fare qualcosa del genere:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();