sql >> Databáze >  >> NoSQL >> MongoDB

Jak použít $set a tečkovou notaci k aktualizaci prvků vloženého pole pomocí odpovídajícího starého prvku?

Pokud je pole členem pole, vyberete je všechny.

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

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

Také nemůžete kombinovat operátory aktualizací s agregací, nemůžete používat věci jako $sites.$.energy_consumption , pokud provádíte agregaci, musíte použít agregační operátory, pouze s výjimkou $match fázi, kde můžete používat operátory dotazů.

Dotaz

  • alternativní mírně odlišné řešení od vašeho pomocí $setField
  • Myslím, že to bude rychlejší, ale pravděpodobně malý rozdíl
  • není třeba používat javascript, bude to pomalejší
  • toto je>=řešení MongoDB 5, $setField je nový operátor

Testovací kód zde

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


  1. MongoDB na Androidu

  2. Mongodb Agregační rámec pro grály 1.3.7

  3. Akka a ReactiveMongo

  4. Zaměňte hodnoty v poli MongoDB