Przekazujesz całe services (obejmuje wszystkie inne pola) do $set , w wyniku czego resetujesz wszystkie pola zagnieżdżone w services . Spróbuj przekazać do dokumentu tylko te dane, które chcesz zaktualizować/dodać za pomocą notacja z kropkami.
Dokumentacja $set
mówi
db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})