python - 发生 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'
)?
解决方案
不,你不能。请参阅我对Pymongo get inserted id's even with duplicate key error 的回答,这是一个类似的问题。
推荐阅读
- swift4 - 如何在没有 alamofire 的 swift 4 中使用 rawdata 在正文中发送字符串?
- java - 登录一个 json 文件
- shiny - 更改 valueBox 中图标的位置
- git - 为什么在 git pull 之后我的本地存储库在 1 次提交之前?
- python - Pyglet 无限循环播放音频
- python - 我正在尝试根据熊猫中的多列对数据进行分类?
- python - 如何知道套接字中的数据包类型?
- couchbase - Couchbase 视图查询不返回所有匹配的文档
- c# - C# 为 SSH 身份验证生成 Ed25519 私钥和公钥对
- mysql - 如何将 Oracle 数据透视函数查询转换为 MySQL 查询