Eamorr,
Operátor $pull nebude fungovat na dokumentu, který používáte, protože klíč „notifications“ ve skutečnosti není pole. Je to spíše vložený dokument s číslovanými klíči, takže povrchně připomíná pole. Neexistuje žádný způsob (o kterém vím) zachovat tuto strukturu dokumentu a nechat očíslované klíče automaticky přejmenovat.
Pokud svůj dokument mírně upravíte, bude vypadat takto:
{
"notifications": [
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "1lfw70h789u13a1e67pv"
},
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
],
"toUname": "Eamorr"
}
Prvky budou stále implicitně očíslovány. Nyní je to pole, takže to získáte zdarma. Můžete použít operátor $pull takto (nejsem obeznámen s ovladačem PHP, takže vám dávám ekvivalent shellu):
db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});
K identifikaci dokumentu jsem svévolně použil klíč „toUname“, ale myslím, že budete chtít použít pole _id. Také používám klíč "id" zpráv k identifikaci zprávy, která se má stáhnout z pole, protože je mnohem bezpečnější a zajišťuje, že omylem neodstraníte špatnou zprávu v případě, že se pole od té doby změnilo. určili jste pořadové číslo pole, které chcete odstranit.
Doufám, že to pomůže.