发生 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'
所示)?
不,你不能。请参阅我对 的回答,这是一个类似的问题。
我知道我们可以得到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'
所示)?
不,你不能。请参阅我对