发生 BulkWriteError 时 Pymongo 插入 ID

Pymongo Inserted Ids When BulkWriteError occurs

我知道我们可以得到inserted_ids of documents inserted by simply accessing pymongo.results.InsertManyResult returned by insert_many操作

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

但让我们考虑在上面的集合中有一个 unique index 字段(假设 "hash"),现在我再插入两条记录,其中一条记录有 重复 已插入的唯一字段将导致预期的 Exception 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' 所示)?

不,你不能。请参阅我对 的回答,这是一个类似的问题。