【发布时间】:2017-12-03 22:20:36
【问题描述】:
在使用 pymongo 的 insert_many 时,我需要忽略重复插入,其中重复项基于索引。我在 stackoverflow 上看到过这个问题,但我没有看到有用的答案。
这是我的代码 sn-p:
try:
results = mongo_connection[db][collection].insert_many(documents, ordered=False, bypass_document_validation=True)
except pymongo.errors.BulkWriteError as e:
logger.error(e)
我希望 insert_many 忽略重复项而不抛出异常(这会填满我的错误日志)。或者,是否可以使用单独的异常处理程序,以便我可以忽略错误。我想念“w=0”...
谢谢
【问题讨论】:
-
即使使用
ordered=FalseBulk "inserts" 仍然会抛出错误,即使整个批次实际上都已提交。选项取决于您是否要try .. except并本质上“忽略”重复键错误,或者如果您真的不想这样做,那么请改用“upserts”。这确实需要在每个文档上有效地“查找”,但本质上是“不能”创建重复键。这就是它的工作原理。 -
如何忽略特定的“重复键”错误?我不想无意中忽略其他错误。
-
好吧
BuklWriteError或 python 中的任何特定类(需要查找),并列出数组中的每个错误。这些条目有一个错误代码E11000在我的脑海中。简单地处理并忽略这些,当然对存在的任何其他代码都“扔/抱怨/记录/随便什么”。 -
这是错误字符串:“batch op errors occurred”,不是很具体。
-
亲爱的 S.M.Styvane, 是的,这个问题以前曾被问过,遗憾的是没有一个答案令人满意。因此,重新发布的原因。但在这种情况下,答案是正确且有用的。