Você está passando todos os
services
(inclui todos os outros campos) para $set
, e, como resultado, você está redefinindo todos os campos aninhados dentro de services
. Tente passar apenas os dados que você deseja atualizar/adicionar ao seu documento usando notação de ponto.
$set documentação diz
db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})