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

How to insert new object without deleting previous one

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

问题是,实际上Rocket Chat不支持非CAS创建的CAS账号。

我们有旧帐户。

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

在Windows上用MongoDBCompass软件进入MongoDB数据库,用我的键盘在服务对象中添加cas对象...

https://i.imgur.com/AIMAlA6.png

如您所见,我可以通过这样做来添加 CAS 功能。

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

1 - 输入 rocketchat_mongo docker

2 - 使用管理员登录连接并使用 rocketchat 数据库

3 - 执行此代码

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

该命令是正确的,因为在服务中添加了 CAS 对象,但是,它删除了密码等其他对象并恢复...

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

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

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

https://i.imgur.com/vA1i3mx.png

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

您正在将整个 services(包括所有其他字段)传递给 $set,因此,您正在重置嵌套在 services 中的所有字段。尝试使用 dot notation.
仅将您想要 update/add 的数据传递到您的文档 $set documentation

To specify an field in an embedded document or in an array, use dot notation.

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