A atualização do Mongoose não se comporta como a atualização do mongo

O MongooseJs tem, na minha opinião, uma grande falha de design. Eles decidiram tornar a vida dos noobs mais fácil modificando o comportamento do método de atualização do modelo de uma forma que não leve aos resultados esperados quando você estiver acostumado com o driver nativo.

model.update(finderObject, replaceWithObject);

não substituirá a entrada encontrada com o replaceWithObject, porque o Mongoose envolve implicitamente o replaceWithObject em um conjunto $ como este:

model.update(finderObject, {$set : replaceWithObject);

Isso ajuda os novos usuários a não fazerem coisas estúpidas, mas o Mongoose não oferece nenhum outro método para obter o comportamento do nativo mongo.

Infelizmente, há uma solução alternativa: você pode simplesmente pegar a coleção de modelos, que é a coleção do driver nativo mongo que está abaixo do mongoose, e executar o comando de atualização lá.

model.collection.update(finderObject, replaceWithObject)

A coisa realmente ruim é que esse comportamento só é mencionado em uma nota lateral na documentação.