Eamorr,
Оператор $ pull не будет работать с документом, который вы используете, потому что клавиша "notifications" на самом деле не является массивом.Это скорее встроенный документ с пронумерованными ключами, внешне напоминающими массив.Нет способа (о котором я знаю) сохранить структуру документа и переименовать нумерованные ключи автоматически.
Если вы слегка реорганизуете свой документ, это будет выглядеть так:
{
"notifications": [
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "1lfw70h789u13a1e67pv"
},
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
],
"toUname": "Eamorr"
}
Элементы будут по-прежнему пронумерованы, неявно.Теперь это массив, так что вы получите это бесплатно.Вы можете использовать оператор $ pull следующим образом (я не знаком с PHP-драйвером, поэтому я даю вам эквивалент оболочки):
db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});
Я произвольно использовал ключ "toUname" для идентификациидокумент, но я думаю, вы захотите использовать поле _id.Кроме того, я использую ключ «id» сообщений для идентификации сообщения, которое нужно извлечь из массива, так как это намного безопаснее и гарантирует, что вы случайно не удалите неправильное сообщение в случае, если массив изменился с тех порВы определили порядковый номер массива для удаления.
Надеюсь, это поможет.