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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了避免使用mongodb重复文档而不使用唯一索引相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

答案

Upsert是避免重复条目的另一种方法,批量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();

以上是关于避免使用mongodb重复文档而不使用唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

使用 MongoDb 创建索引

MongoDB Indexes

如何使MongoDB的列成为SQL Server中发生的主键,避免重复记录?

Mongodb插入50M文档而不重复的最佳方法

唯一索引不适用于 Mongoose / MongoDB

MongoDB和部分索引:在空日期过滤时避免过滤阶段