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

MongoDB:Usuwanie pola ze WSZYSTKICH poddokumentów w polu tablicy

Powodem, dla którego otrzymujesz ten błąd, jest brak predykatu w klauzuli filtra. Możesz to zrobić:

mongos> db.test.update({"messages.id": {$exists: true}}, {$unset: {"messages.$.id":true}}, {multi:true})

I nie dostaniesz błędu - w rzeczywistości jeden z dokumentów będzie miał id atrybut usunięty. Problem polega na tym, że operator pozycyjny pasuje tylko do PIERWSZEGO elementu tablicy, który pasuje do twojego predykatu, nie pasuje do wszystkich elementów. Większym problemem jest to, że obecnie nie jest możliwe aktualizowanie wszystkich elementów tablicy w MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Będziesz musiał przejść przez każdy element w tablicy, używając pozycji numerycznej ("messages.0.id", "messages.1.id" itp.) lub możesz przeciągnąć tablicę do swojej aplikacji, wykonując pętlę przez elementy i zaktualizuj je, a następnie zapisz tablicę z powrotem.

Na zgłoszeniu JIRA widać, że ten problem jest otwarty od dłuższego czasu, ale 10gen nie wydaje się uważać go za bardzo wysoki priorytet.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Baza danych do wyboru do gry

  2. MongoError:Sprawdzanie poprawności dokumentu nie powiodło się - Jak wstawić zarówno float, jak i int w to samo pole - które jest oznaczone jako podwójne?

  3. Katalog główny Mongodb monogorestore musi być zrzutem pojedynczej bazy danych

  4. NodeJS wylogowuje wszystkie sesje użytkowników

  5. Usuń według _id w konsoli MongoDB