【问题标题】:How to insert new object without deleting previous one如何插入新对象而不删除前一个对象
【发布时间】:2019-04-09 15:38:01
【问题描述】:

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

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

我们有旧帐户。

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

在Windows上用MongoDB Compass软件进入MongoDB数据库,用我的键盘在services对象中添加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

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

【问题讨论】:

  • 我不知道为什么,但我需要 10 名声望才能放图片...对不起链接伙计们...

标签: mongodb mongodb-query rocket.chat


【解决方案1】:

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

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

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

【讨论】:

  • 您好,非常感谢您,它正在按我的意愿工作。现在我可以更新我所有的数据库了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多