避免使用mongodb重复文档而不使用唯一索引

时间:2018-02-28 12:56:50

标签: python mongodb mongodb-query mongoengine

Link to similar problem
(假设上面的链接提供了上下文)

在非常有限的时间内,在我的情况下,Mongodb会收到很多连接。在此时间跨度内,如果发生任何insert,则会创建多个重复文档。

请注意,从代码中,我只保存一个文档。但是,mongodb存储具有不同_id s的重复项。 许多解决方案建议在收集时添加唯一索引,但在我的情况下是不可能的。

确保对于一次插入操作,数据库中只有一个条目的最佳方法是什么? 另外,它创建重复文档的原因是什么?我用的是mongoengine。是mongodbmongoenginewebserverapache)是否正在重试insert来电?为什么?

使用的版本:
mongoengine 0.8.7
pymongo 2.8.1
mongodb 2.6.12
Python 2.7.12

1 个答案:

答案 0 :(得分:1)

Upsert 是另一种避免重复输入的方法,批量上传文档bulk upsert pymongo

updateBulk = db.collection.initialize_unordered_bulk_op()

updateBulk.find({
                    "field1":"field1",
                    "field2":"field2",
                      ...
                      ...
                      ...
                   "fieldn":"fieldn"

                }).upsert().update_one({'$set': {
                   "field1":"field1",
                    "field2":"field2",
                      ...
                      ...
                      ...
                   "fieldn":"fieldn",
                    }})

result1 = updateBulk.execute();