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

Sådan fjerner du et element fra et dobbelt indlejret array i et MongoDB-dokument.

For at slette det pågældende element skal du faktisk bruge en opdatering. Mere specifikt vil du lave en opdatering med $pull kommando, som vil fjerne elementet fra arrayet.

db.temp.update(
  { _id : "777" },
  {$pull : {"someArray.0.someNestedArray" : {"name":"delete me"}}}
)

Der sker en lille smule "magi" her. Brug af .0 angiver, at vi ved, at vi ændrer det 0. element i someArray . Brug {"name":"delete me"} angiver, at vi kender de nøjagtige data, som vi planlægger at fjerne.

Denne proces fungerer fint, hvis du indlæser dataene i en klient og derefter udfører opdateringen. Denne proces fungerer mindre godt, hvis du vil lave "generiske" forespørgsler, der udfører disse operationer.

Jeg tror, ​​det er nemmest blot at erkende, at opdatering af arrays af underdokumenter generelt kræver, at du har originalen i hukommelsen på et tidspunkt.

Som svar på den første kommentar nedenfor, kan du sikkert hjælpe din situation ved at ændre datastrukturen lidt

"someObjects" : {
  "name1":  {
        "someNestedArray" : [
            {
                "name" : "value"
            },
            {
                "name" : "delete me"
            }
        ]
    }
}

Nu kan du gøre {$pull : { "someObjects.name1.someNestedArray" : ...

Her er problemet med din struktur. MongoDB har ikke særlig god support til at manipulere "sub-arrays". Din struktur har en række objekter, og disse objekter indeholder arrays af flere objekter.

Hvis du har følgende struktur, vil du få svært ved at bruge ting som $pull :

array [
  { subarray : array [] },
  { subarray : array [] },
]

Hvis din struktur ser sådan ud og du vil opdatere subarray du har to muligheder:

  1. Skift din struktur, så du kan udnytte $pull .
  2. Brug ikke $pull . Indlæs hele objektet i en klient og brug findAndModify .


  1. Sådan bruges variabler i MongoDB Map-reducer kortfunktion

  2. Søgning i værdier af en redis db

  3. Migrering af MongoDB til DynamoDB, del 2

  4. Kom godt i gang med CouchDB