MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB/PHP:usuń element z tablicy

Zakochany,

Operator $pull nie będzie działał na dokumencie, którego używasz, ponieważ klucz "powiadomień" nie jest tak naprawdę tablicą. Jest to raczej osadzony dokument z ponumerowanymi kluczami, dzięki czemu powierzchownie przypomina tablicę. Nie ma sposobu (o którym wiem), aby zachować tę strukturę dokumentu i automatycznie zmienić nazwy ponumerowanych kluczy.

Jeśli nieznacznie zmienisz swój dokument, aby wyglądał tak:

{
   "notifications": [
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "1lfw70h789u13a1e67pv"
    },
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "iwoidjsoskqp23nlwof"
    }
  ],
   "toUname": "Eamorr"
}

Elementy nadal będą ponumerowane, niejawnie. Teraz jest to tablica, więc dostajesz to za darmo. Możesz użyć operatora $pull w ten sposób (nie znam sterownika PHP, więc podaję ci odpowiednik powłoki):

db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});

Do identyfikacji dokumentu użyłem arbitralnie klucza „toUname”, ale myślę, że będziesz chciał użyć pola _id. Ponadto używam klucza "id" wiadomości do identyfikacji wiadomości do pobrania z tablicy, ponieważ jest to o wiele bezpieczniejsze i zapewnia, że ​​nie usuniesz przypadkowo niewłaściwej wiadomości na wypadek, gdyby tablica zmieniła się od tego czasu zidentyfikowałeś liczbę porządkową tablicy do usunięcia.

Mam nadzieję, że to pomoże.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy MongoDB może przechowywać i manipulować ciągami znaków UTF-8 z punktami kodowymi poza podstawową płaszczyzną wielojęzyczną?

  2. MongoDB $acos

  3. Jak ustawić limit czasu połączenia MongoClient?

  4. MongoDB i Google Cloud Functions VPC równorzędne?

  5. Jak filtrować tablicę w dokumencie Mongodb za pomocą Spring?