Du skickar hela services (inkluderar alla andra fält) till $set , och som ett resultat återställer du alla fält som är kapslade i services . Försök att skicka endast data som du vill uppdatera/lägga till i ditt dokument med punktnotation.
$set-dokumentation
säger
db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})