预计会将重复文档插入到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 duplicate key error index: myDb.myCollection.$timestamp_1 dup key: { : 1385290560000000000 }
我很困惑为什么dropDups=True
无效。
答案 0 :(得分:2)
dropDups
仅通过删除time of index creation处的重复文档来影响现有馆藏。但是它不会在以后停止引发异常/错误。当您尝试两次插入同一文档时,如果使用insert
,将始终出现错误。您可以考虑使用upsert
(reference和通过findAndModify
(reference)),这可以配置为有条件地应用新文档而不是引发异常。
如果可能的话,您可以考虑在本地保留时间戳的哈希,以避免完全调用数据库(偶尔,您需要清除哈希表以防止无限制的增长)。
或者,在您插入数据之后(如果可能),请不要启用索引。