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.