$push
służy do dołączania wartości do tablicy. W twoim przykładzie measurements jest tablicą, a Mongo dołącza $newData jako pierwszy element. To wyjaśnia 0 indeks między measurements i levels . W żądanym wyniku measurements jest obiektem równoważnym $newData (tzn. ma levels właściwość, która z kolei zawiera tablicę obiektów).
Każdy z poniższych przykładów powinien osiągnąć to, co chcesz:
// 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)
Uwaga:$push będzie bardziej elastyczny, jeśli chcesz dołączać dane do przyszłych aktualizacji, podczas gdy $set naturalnie nadpisze dane pole.