Открих, че командата $pull също не работи за мен, освен ако не включа обратното извикване в списъка с аргументи.
В моята ситуация този формат не работи:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Но този формат успя:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Според документацията изглежда, че и двете трябва да работят, но не го правят. Причината е, че първият начин изисква да извикате .exec() на върнатия обект, докато версията за обратно извикване извиква exec() автоматично. Причини известно объркване и за мен.
Така че трябва да направите нещо подобно:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();