我有一些推文。我想在此集合中插入推文列表。新列表也可能有一些重复的推文,我想确保重复的推文不会被写,但剩下的都是。为此,我使用以下代码。
mongoPayload = <list of tweets>
committedTweetIDs = db.tweets.insert(mongoPayload, w=1, continue_on_error=True)
print "%d documents committed" % len(committedTweetIDs)
以上代码段应该可以使用。但是,我得到的行为是第二行生成DuplicateKeyError。我不知道这是怎么回事,因为我提到了continue_on_error。
我最终想要的是Mongo提交所有非重复文档并返回给我(作为确认)所有写入期刊的文件的tweetID。
答案 0 :(得分:6)
即使使用continue_on_error=True
,如果MongoDB告诉您尝试插入带有重复_id
的文档,PyMongo也会引发DuplicateKeyError。但是,对于continue_on_error=True
,服务器已尝试插入列表中的所有文档,而不是在第一个错误上中止操作。该例外的error_document
属性会在您的文档列表中显示最后重复_id
。
不幸的是,当您执行批量插入时,无法确定总共有多少文档成功并且失败了。我们实施批量写操作时MongoDB 2.6 and PyMongo 2.7 will address this in the next release。