使用continue_on_error,Pymongo w = 1

时间:2014-01-07 20:23:01

标签: mongodb pymongo

我有一些推文。我想在此集合中插入推文列表。新列表也可能有一些重复的推文,我想确保重复的推文不会被写,但剩下的都是。为此,我使用以下代码。

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。

1 个答案:

答案 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