PyMongo抛出“E11000重复键错误索引”

时间:2013-11-24 16:11:04

标签: 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 duplicate key error index: myDb.myCollection.$timestamp_1 dup key: { : 1385290560000000000 }

我很困惑为什么dropDups=True无效。

1 个答案:

答案 0 :(得分:2)

dropDups仅通过删除time of index creation处的重复文档来影响现有馆藏。但是它不会在以后停止引发异常/错误。当您尝试两次插入同一文档时,如果使用insert,将始终出现错误。您可以考虑使用upsertreference和通过findAndModifyreference)),这可以配置为有条件地应用新文档而不是引发异常。

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

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