python - PyMongo 抛出 "E11000 duplicate key error index"

标签 python mongodb python-2.7 ipython pymongo

重复文档预计会插入到 mongodb 集合中,因此使用 unique=TruedropDups=True 创建索引。

db.myCollection.create_index("timestamp", unique=True, dropDups=True)

但是,如果同一组文档被插入两次,第一次插入正常,但第二次插入会抛出错误

db.myCollection.insert(json.loads(df.to_json()).values())

DuplicateKeyError: E11000 重复键错误索引: myDb.myCollection.$timestamp_1 dup key: { : 1385290560000000000 }

我很困惑为什么 dropDups=True 不起作用。

最佳答案

dropDups 仅通过删除 time of index creation 处的重复文档来影响现有集合。 。但是,它稍后不会阻止引发异常/错误。当您尝试插入同一个文档两次时,如果您使用 insert,则始终会抛出错误。您可以考虑使用 upsert ( reference 和通过 findAndModify ( reference )),它可以配置为有条件地应用新文档,而不是引发异常。

如果可能的话,您可能会考虑在本地保留时间戳的哈希值,以避免完全调用数据库(有时,您需要清除哈希表以防止无限增长)。

或者,在插入数据之前不要启用索引(如果可能)。

关于python - PyMongo 抛出 "E11000 duplicate key error index",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176728/

相关文章:

javascript - 正则表达式过滤掉json字符串中的部分键值

python - 如何使用多个字典转换字符串,以便 json.load 可以解析它?

mongodb - 在 scrapinghub spider 中添加设置

java - 如何在 Spring 中编写 mongodb 聚合减少查询?

python - centos上python 2.7专门安装MySQLdb

python - 使用带有 "with"语句的 Python 队列

python-2.7 - 如何在python中列出包含特定模式文件的文件夹/目录?

python - Dask:Dataframe groupBy 上的唯一方法

mongodb - 未知函数选择位于/tmp/vagrant-puppet/modules-84c36838170137b342ad08a194e8c35b/mongodb/manifests/params.pp :6 on node - Vagrant

python scipy : unsupported operand type(s) for ** or pow(): 'list' and 'list'