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

时间:2014-10-08 06:52:35

标签: mongodb

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

让我们将objectToSave定义如下

{_id:'abc', field1:1, field2:2};

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

{_id:'abc', field3:3};

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

{_id:'abc', field1:1, field2:2};

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

{_id:'abc', field1:1, field2:2, field3:3};

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

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

1 个答案:

答案 0 :(得分:9)

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

应该做你想做的事:

  1. 它是upserts,所以如果文档还不存在,它会被创建为{_id:'abc',field1:1,field2:2}并且效率很高,因为使用的索引必须存在
  2. 如果文档已存在,则字段field1和field2将设置为update语句中的值。
  3. 如果文档中存在任何一个字段,它将被覆盖。
  4. 由于您没有说明您使用的语言:在普通的mongoDB中,没有save函数。合并新的和持久化的实体版本的明确要求是非常不寻常的,所以是的,我假设您必须编写自定义函数。