$push
est utilisé pour ajouter une valeur à un tableau. Dans votre exemple, measurements est un tableau et Mongo ajoute $newData comme son premier élément. Ceci explique le 0 index entre measurements et levels . Dans le résultat souhaité, measurements est un objet équivalent à $newData (c'est-à-dire qu'il a un levels propriété, qui à son tour contient un tableau d'objets).
L'un ou l'autre des exemples suivants devrait accomplir ce que vous voulez :
// 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)
Remarque :$push va être plus flexible si vous souhaitez ajouter des données avec de futures mises à jour, alors que $set écrasera naturellement le champ donné.