我知道在mongodb的常规upsert操作中,如果文件存在,mongodb将执行更新,否则它将执行插入。但是我想要的是:如果文档存在,mongodb只是保持不变,否则它会插入。当然,它可以通过使用相同的数据来更新旧文档来实现传统的upsert。但问题是:更新操作完全没必要; mongodb可以跳过它。当然我也可以使用read-test-write语句来完成这项工作,但我只限于python,因此这种方法计算成本很高。所以我在这里发布帖子,询问mongodb是否有任何与“upsert”一样快的操作,跳过任何现有文件(如果有的话),否则插入新文档。谢谢。
答案 0 :(得分:3)
upsert的$setOnInsert参数仅在插入时设置字段,而不在更新时设置字段。如果没有其他更新参数或字段,则此查询将不会影响现有文档。
你可以这样使用它:
db.collection.update(
{
<your query >
},
{ $setOnInsert: {
<your new document>
}
},
true //upsert
)