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

Hvordan bruger man $set og dot notation til at opdatere indlejrede array-elementer ved hjælp af tilsvarende gamle element?

Hvis feltet er medlem af et array ved at vælge det, markerer du dem alle.

{ar :[{"a" : 1}, {"a" : 2}]}

"$ar.a" = [1 ,2]

Du kan heller ikke blande opdateringsoperatører med aggregering, du kan ikke bruge ting som$sites.$.energy_consumption , hvis du laver aggregering, skal du bruge aggregerede operatorer, kun med undtagelse af $match trin, hvor du kan bruge forespørgselsoperatorer.

Forespørgsel

  • alternativ lidt anderledes løsning end din ved hjælp af $setField
  • Jeg tror, ​​det vil være hurtigere, men sandsynligvis en lille forskel
  • ingen grund til at bruge javascript det vil være langsommere
  • dette er>=MongoDB 5-løsning, $setField er ny operatør

Testkode her

aggregate(
[{"$set":
  {"sites":
   {"$map":
    {"input":"$sites",
     "in":
     {"$setField":
      {"field":"new_field",
       "input":"$$this",
       "value":"$$this.energy_consumption"}}}}}}]
)


  1. Kubernetes / Rancher 2, mongo-replikaset med implementering af lokal lagervolumen

  2. Sådan opretter du bønnen til FindByIndexNameSessionRepository

  3. Azure Redis Cache - Flere fejl TimeoutException:Timeout udfører GET {key}

  4. Opdater mange dokumenter i mongoDB med forskellige værdier