首页 > 解决方案 > 发生 BulkWriteError 时 Pymongo 插入的 Id

问题描述

我知道我们可以通过简单地访问insert_many操作返回的pymongo.results.InsertManyResult来获取插入的文档的insert_ids

>>> o = db.collection.insert_many([{"hash": "abcde"}, {"hash": "efgh"}], ordered=False)
>>> o.inserted_ids
   [ObjectId('5f5280fdca7d7735e9dcbb85'), ObjectId('5f5280fdca7d7735e9dcbb86')]

但是让我们考虑我们在上面的集合中有一个unique index字段(比方说"hash"),现在我再插入两条记录,其中一条具有已插入的重复唯一字段,这将导致预期的异常 BulkWriteError

>>> try:
        o = db.collection.insert_many([{"hash": "efgh"}, {"hash": "ijk"}], ordered=False)
    except BulkWriteError as e:
        print(e.details)
    
    {'nInserted': 1,
     'nMatched': 0,
     'nModified': 0,
     'nRemoved': 0,
     'nUpserted': 0,
     'upserted': [],
     'writeConcernErrors': [],
     'writeErrors': [{'code': 11000,
                     'errmsg': 'E11000 duplicate key error collection: '
                               'db.collection index: hash_1 dup key: { : "efgh" }',
                     'index': 0,
                     'op': {'_id': ObjectId('5f52814381c45515348fd36b'),
                            'hash': 'efgh'}}]}

但我的问题是我们能否获得已成功插入的文档的插入 ID(即由 显示'nInserted')?

标签: pythonmongodbpymongounique-index

解决方案


不,你不能。请参阅我对Pymongo get inserted id's even with duplicate key error 的回答,这是一个类似的问题。


推荐阅读