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

时间:2019-04-09 15:38:01

标签: mongodb mongodb-query rocket.chat

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

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

我们有旧帐户。

我可以通过执行以下操作添加CAS功能:

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

https://i.imgur.com/AIMAlA6.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.imgur.com/vA1i3mx.png

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

1 个答案:

答案 0 :(得分:0)

您要将整个services(包括所有其他字段)传递到$set,结果,您将重置嵌套在services中的所有字段。尝试仅使用dot notation.将要更新/添加到文档的数据传递给文档
$set documentation

  

要在嵌入式文档或数组中指定字段,请使用点符号。

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