$push é usado para anexar um valor a uma matriz. No seu exemplo,
measurements
é um array e o Mongo está anexando $newData
como seu primeiro elemento. Isso explica o 0
índice entre measurements
e levels
. No resultado desejado, measurements
é um objeto equivalente a $newData
(ou seja, tem um levels
propriedade, que por sua vez tem uma matriz de objetos dentro). Qualquer um dos exemplos a seguir deve realizar o que você deseja:
// 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á mais flexível se você quiser anexar dados com atualizações futuras, enquanto $set
irá sobrescrever naturalmente o campo dado.