如何在RocketChat用户services中新增CAS对象而不删除原有内容
解决RocketChat旧账号添加CAS登录配置不覆盖原有services字段的问题
我来帮你搞定这个问题!你之前遇到的是MongoDB更新操作里的典型陷阱——直接替换整个services对象会把原有字段都删掉,我们只需要调整更新命令的写法,就能精准添加CAS配置同时保留password、resume等原有内容。
正确的MongoDB更新命令
db.users.update( {"name":"Fabien Rousseau"}, { $set: {"services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}} )
为什么原来的命令会出问题?
你之前的写法是直接用$set把整个services对象替换成仅包含cas的新对象,这会覆盖掉services里原有的所有字段。而改用**点符号(services.cas)**指定嵌套字段后,MongoDB只会更新或添加这个特定的嵌套对象,完全不会影响services下的其他原有字段。
完整操作步骤
- 进入rocketchat_mongo容器
- 使用管理员账号登录MongoDB,切换到
rocketchat数据库 - 执行上面给出的修正版更新命令
这样操作后,用户的services对象里会保留原来的password、resume等内容,同时新增CAS相关的配置,完美解决你的需求!
内容的提问来源于stack exchange,提问作者LegeekX3
相关产品推荐
相关产品推荐

