Selamat,
Operator $pull tidak akan bekerja pada dokumen yang Anda gunakan, karena kunci "notifikasi" sebenarnya bukan array. Ini lebih merupakan dokumen yang disematkan, dengan kunci bernomor, membuatnya menyerupai sebuah array. Tidak ada cara (yang saya tahu) untuk mempertahankan struktur dokumen ini dan tombol bernomor diganti namanya secara otomatis.
Jika Anda sedikit memfaktorkan ulang dokumen Anda, agar terlihat seperti ini:
{
"notifications": [
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "1lfw70h789u13a1e67pv"
},
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
],
"toUname": "Eamorr"
}
Unsur-unsur masih akan diberi nomor, secara implisit. Sekarang menjadi array, jadi Anda mendapatkannya secara gratis. Anda dapat menggunakan operator $pull seperti ini (saya tidak terbiasa dengan driver PHP, jadi saya memberi Anda shell yang setara):
db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});
Saya secara sewenang-wenang menggunakan kunci "toUname" untuk mengidentifikasi dokumen, tetapi saya kira Anda ingin menggunakan bidang _id. Juga, saya menggunakan kunci "id" dari pesan untuk mengidentifikasi pesan yang akan ditarik dari array, karena jauh lebih aman dan memastikan Anda tidak secara tidak sengaja menghapus pesan yang salah jika array telah berubah sejak Anda mengidentifikasi ordinal larik yang akan dihapus.
Semoga membantu.