Estás pasando todos los services
(incluye todos los demás campos) a $set
y, como resultado, está restableciendo todos los campos anidados dentro de services
. Intente pasar solo los datos que desea actualizar/agregar a su documento usando notación de punto.
$set documentación
dice
db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})