$push
se utiliza para agregar un valor a una matriz. En su ejemplo, measurements
es una matriz y Mongo está agregando $newData
como su primer elemento. Esto explica el 0
índice entre measurements
y levels
. En el resultado deseado, measurements
es un objeto equivalente a $newData
(es decir, tiene un levels
propiedad, que a su vez tiene una matriz de objetos dentro).
Cualquiera de los siguientes ejemplos debería lograr lo que desea:
// if $newData is {"levels": [{"level_qty":12,"level_uom":"ft"}]}
->set("measurements", $newData)
// if $newData is [{"level_qty":12,"level_uom":"ft"}]
->set("measurements.levels", $newData)
// if $newData is {"level_qty":12,"level_uom":"ft"}
->push("measurements.levels", $newData)
Nota:$push
será más flexible si desea agregar datos con futuras actualizaciones, mientras que $set
sobrescribirá naturalmente el campo dado.