如何在不删除上一个对象的情况下插入新对象



我正在设置我的新RocketChat服务器。

问题是,实际上,如果CAS不是由CAS创建的,则Rocket Chat不支持CAS帐户。

我们有旧账。

我可以通过这样做添加 CAS 功能:

在Windows上使用MongoDB Compass软件输入MongoDB数据库,然后用我的键盘在服务对象中添加cas对象...

https://i.stack.imgur.com/weLuk.png

如您所见,我可以通过执行此操作来添加 CAS 功能。

我想用代码做到这一点,所以我做了这个:

1 - 输入rocketchat_mongo码头工人

2 - 使用管理员登录连接并使用火箭聊天数据库

3 - 执行此代码

db.users.update({"name":"Fabien Rousseau"},{ $set: {"services" : { "cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}}})

该命令是可以的,因为 CAS 对象已添加到服务中,但是,它会删除另一个对象,如密码并恢复...

我只想添加 CAS 对象而不删除其他对象...

我的预期结果在第一张图片中:CAS帐户。

实际上在命令之后我有这个:

https://i.stack.imgur.com/hkJoe.png

请帮助我调整我的命令以避免删除我的服务对象中的其他对象。

您将整个services(包括所有其他字段)传递给$set,因此,您将重置嵌套在services中的所有字段。尝试使用点表示法仅传递要更新/添加到文档中的数据。
$set文档说

若要在嵌入文档或数组中指定字段,请使用点表示法。

db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})

最新更新