首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用insert_many安全地忽略重复的键错误

如何使用insert_many安全地忽略重复的键错误
EN

Stack Overflow用户
提问于 2019-03-15 01:07:23
回答 1查看 0关注 0票数 0

当使用带有pymongo的insert_many时,我需要忽略重复插入,其中重复项基于索引。我已经在stackoverflow上看到了这个问题,但我还没有看到有用的答案。

这是我的代码片段:

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”......

谢谢

EN

Stack Overflow用户

发布于 2019-03-15 10:32:47

您可以通过检查生成的错误来处理此问题BulkWriteError。这实际上是一个具有多个属性的“对象”。有趣的部分是details

import pymongo
from bson.json_util import dumps
from pymongo import MongoClient
client = MongoClient()
db = client.test

collection = db.duptest

docs = [{ '_id': 1 }, { '_id': 1 },{ '_id': 2 }]


try:
  result = collection.insert_many(docs,ordered=False)

except pymongo.errors.BulkWriteError as e:
  print e.details['writeErrors']

在第一次运行时,这将给出错误列表e.details['writeErrors']

[
  { 
    'index': 1,
    'code': 11000, 
    'errmsg': u'E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }', 
    'op': {'_id': 1}
  }
]

在第二次运行时,您会看到三个错误,因为所有项目都存在:

[
  {
    "index": 0,
    "code": 11000,
    "errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }", 
    "op": {"_id": 1}
   }, 
   {
     "index": 1,
     "code": 11000,
     "errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }",
     "op": {"_id": 1}
   },
   {
     "index": 2,
     "code": 11000,
     "errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 2 }",
     "op": {"_id": 2}
   }
]

所以你需要做的就是过滤数组中的条目,"code": 11000

panic = filter(lambda x: x['code'] != 11000, e.details['writeErrors'])

if len(panic) > 0:
  print "really panic"

这为您提供了一种忽略重复键错误的机制,但当然要注意实际上存在问题的东西。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档