重复文档预计会插入到 mongodb 集合中,因此使用 unique=True
和 dropDups=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/