mongodb - 带有 continue_on_error 的 Pymongo w=1

标签 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。

最佳答案

即使使用 continue_on_error=True,如果 MongoDB 告诉 PyMongo 您试图插入具有重复 _id 的文档,PyMongo 也会引发 DuplicateKeyError。但是,对于 continue_on_error=True,服务器尝试将所有文​​档插入列表中,而不是在出现第一个错误时中止操作。异常的 error_document 属性告诉您文档列表中的last 重复 _id

不幸的是,当您进行批量插入时,您无法确定总共有多少文档成功和失败。 MongoDB 2.6 and PyMongo 2.7 will address this in the next release当我们实现批量写入操作时。

关于mongodb - 带有 continue_on_error 的 Pymongo w=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981123/

相关文章:

python - 为什么 PyMongo 将 uuid.uuid1() 编码为 BSON::Binary?

mongodb - 在查询中使用 MongoDB 自引用值

Python - 将类型分配给字典中的值

MongoDB按objectIds数组过滤

angular - 连接为 Meteor 客户端的 Ionic UI 的简单示例?

当我使用多个 ip 地址时,MongoDB 不会启动

java - 添加第二个 '$or' 表达式失败

python - pymongo geo2d 聚合结果以什么单位返回

MongoDB 权限 : restrict access to two databases

python - 从 mongoDB 中提取信息