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

Opdatering af en dyb rekord i MongoDb

Problemet er, at du ikke kan bruge $ operator for at vise matchning på indlejrede niveauer i en matrix. Og vigtigst af alt kan du kun angive én gang.

Som det fremgår af dokumentationen , er at $ vil kun match den første element fundet. Det ikke kun betyder, at hvis du havde flere match til din forespørgsel, så ville kun den første blive valgt, det betyder også, at kun den først matchede array position vil blive brugt. Det betyder, at noget som dette heller ikke ville virke:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Da det fejlagtigt ville matche index 1 værdi og opdater en vare, du ikke havde forventet.

Hvis du muligvis kunne opdatere hele array, så ville følgende virke:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Det er som jeg sagde, fordi index matcher den første array.

Men givet den struktur, du har, ser det ud til, at din bedste mulighed er at ændre det øverste niveau til at være et underdokument i stedet. Medmindre dette i virkeligheden har en grund til at være en matrix snarere end de to blandede dokumenttyper, som det ser ud til at være nu.



  1. Hvordan gemmer man forespørgselsresultatet (et enkelt dokument) i en variabel?

  2. Gruppér og tæl efter måned

  3. Hvordan implementerer man en node.js med redis på kubernetes?

  4. MongoDB/Mongoose - Forespørgsel efter en række objekter efter dato