sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB/PHP:odstranění prvku z pole

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.




  1. Upozornění při spuštění serveru Mongo DB

  2. Pět tipů pro lepší hosting MongoDB v Azure

  3. Jak počítat výskyty ve vnořeném dokumentu v mongodb?

  4. Loopback ValidationError:Instance `Role` není platná. Podrobnosti:`název` již existuje (hodnota:admin)