mongodb能以这种方式“upsert”吗?

时间:2013-11-13 11:18:07

标签: python mongodb upsert

我知道在mongodb的常规upsert操作中,如果文件存在,mongodb将执行更新,否则它将执行插入。但是我想要的是:如果文档存在,mongodb只是保持不变,否则它会插入。当然,它可以通过使用相同的数据来更新旧文档来实现传统的upsert。但问题是:更新操作完全没必要; mongodb可以跳过它。当然我也可以使用read-test-write语句来完成这项工作,但我只限于python,因此这种方法计算成本很高。所以我在这里发布帖子,询问mongodb是否有任何与“upsert”一样快的操作,跳过任何现有文件(如果有的话),否则插入新文档。谢谢。

1 个答案:

答案 0 :(得分:3)

upsert的$setOnInsert参数仅在插入时设置字段,而不在更新时设置字段。如果没有其他更新参数或字段,则此查询将不会影响现有文档。

你可以这样使用它:

db.collection.update(
    { 
        <your query >
    },
    { $setOnInsert: {
             <your new document>
        }
    },
    true //upsert
)