sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo usar la notación $set y dot para actualizar elementos de matriz incrustados usando el elemento anterior correspondiente?

Si el campo es miembro de una matriz al seleccionarlo, los está seleccionando a todos.

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

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

Además, no puede mezclar operadores de actualización con agregación, no puede usar cosas como $sites.$.energy_consumption , si está agregando, debe usar operadores agregados, con la única excepción de $match etapa en la que puede utilizar operadores de consulta.

Consulta

  • solución alternativa ligeramente diferente a la suya usando $setField
  • supongo que será más rápido, pero probablemente poca diferencia
  • no es necesario usar javascript, será más lento
  • esta es>=la solución MongoDB 5, $setField es nuevo operador

Código de prueba aquí

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