在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.
答案 0 :(得分:9)
db.collection.update({'_id':'abc'},{$set:{field1:1,field2:2}},{upsert:true})
应该做你想做的事:
{_id:'abc',field1:1,field2:2}
并且效率很高,因为使用的索引必须存在由于您没有说明您使用的语言:在普通的mongoDB中,没有save
函数。合并新的和持久化的实体版本的明确要求是非常不寻常的,所以是的,我假设您必须编写自定义函数。