MongoDB db.collection.save在存在时覆盖对象

Lee*_*Lee 9 mongodb

在MongoDB中,您可以使用它db.collection.save({_id:'abc'}, objectToSave)来执行upsert.

我们将objectToSave定义如下

{_id:'abc', field1:1, field2:2};
Run Code Online (Sandbox Code Playgroud)

在我的收藏中,我已经拥有一个具有相同_id值的文档,如下所示:

{_id:'abc', field3:3};
Run Code Online (Sandbox Code Playgroud)

上面的保存功能将替换集合中的现有文档

{_id:'abc', field1:1, field2:2};
Run Code Online (Sandbox Code Playgroud)

我想要的是执行$ set操作来生成集合中的一些文档,如下所示

{_id:'abc', field1:1, field2:2, field3:3};
Run Code Online (Sandbox Code Playgroud)

这可以在保存功能中实现,还是我必须编写单独的更新语句?

请注意,objectToSave的字段是动态的.我正在使用的语言是Node.JS.

Mar*_*erg 9

db.collection.update({'_id':'abc'},{$set:{field1:1,field2:2}},{upsert:true})
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事:

  1. 它是upserts,所以如果文档还不存在,它会被创建为{_id:'abc',field1:1,field2:2}有效的,因为使用的索引必须存在
  2. 如果文档已存在,则字段field1和field2将设置为update语句中的值.
  3. 如果文档中存在任何一个字段,它将被覆盖.

既然你没有说明你使用的语言:在普通的mongoDB中,没有任何save功能.合并新的和持久化的实体版本的明确要求是非常不寻常的,所以是的,我假设您必须编写自定义函数.