sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:Fjernelse af et felt fra ALLE underdokumenter i et matrixfelt

Grunden til at du får den fejl, er fordi du ikke har noget prædikat i filterklausulen. Du kan gøre dette:

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

Og du får ingen fejl - faktisk vil et af dokumenterne have id attribut fjernet. Problemet er, at positionsoperatoren kun matcher det FØRSTE element i arrayet, der matcher dit prædikat, det matcher ikke alle elementer. Det større problem er, at det i øjeblikket ikke er muligt at opdatere alle elementerne i et array i MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Du bliver enten nødt til at gentage hvert element i arrayet ved hjælp af den numeriske position ("messages.0.id", "messages.1.id", osv.), eller du kan trække arrayet ind i din applikation, sløjfe gennem elementer og opdater dem, og gem derefter arrayet igen.

Du kan se på JIRA-billetten, at dette nummer har været åbent i et stykke tid, men 10gen ser ikke ud til at have særlig høj prioritet.



  1. Kald Mongodb lagret funktion fra PHP7

  2. Få alle feltnavne i en mongodb-samling?

  3. DB med den bedste indsats/sekund ydeevne?

  4. Har MongoDB en måde at opdatere et dokument på uden at slette eksisterende elementer, der ikke er indeholdt i opdateringsdataene