Saya menemukan bahwa perintah $pull juga tidak berfungsi untuk saya kecuali saya menyertakan panggilan balik dalam daftar argumen.
Dalam situasi saya, format ini tidak berfungsi:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}});
Tapi format ini berhasil:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}, function(err, data){
console.log(err, data);
});
Menurut dokumentasi, sepertinya keduanya berfungsi, tetapi tidak. Alasannya karena cara pertama mengharuskan Anda memanggil .exec() pada objek yang dikembalikan, sedangkan versi callback memanggil exec() secara otomatis. Menyebabkan kebingungan bagi saya juga.
Jadi, Anda perlu melakukan sesuatu seperti ini:
UserAlerts.findOneAndUpdate({userId: userId}, {$pull: {alerts: {_id: alertId}}}).exec();