在 MongoDB 中,您可以使用 db.collection.save({_id:'abc'}, objectToSave)
执行更新插入。
让我们如下定义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。
最佳答案
db.collection.update({'_id':'abc'},{$set:{field1:1,field2:2}},{upsert:true})
应该做你想做的事:
- 它会进行更新插入,因此如果文档尚不存在,则会将其创建为
{_id:'abc',field1:1,field2:2}
并且高效,因为使用了索引必须存在 - 如果文档已存在,则字段 field1 和 field2 将设置为更新语句中的值。
- 如果文档中存在任一字段,它将被覆盖。
由于您没有说明您使用的语言:在普通的 mongoDB 中,没有 save
功能。合并实体的新版本和持久版本的明确要求是非常不寻常的,所以是的,我假设您必须编写一个自定义函数。
关于MongoDB db.collection.save 存在时覆盖对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26250789/