gpt4 book ai didi

mongodb - 在具有重复键的批量插入中查找插入文档的数量

转载 作者:可可西里 更新时间:2023-11-01 09:59:05 28 4
gpt4 key购买 nike

我正在对 mongodb 数据库进行批量插入。我知道 99% 的记录插入都会因为重复键错误而失败。我想在插入后打印有多少条新记录被插入到数据库中。所有这些都是通过 tornado 电机 mongodb 驱动程序在 python 中完成的,但这可能并不重要。

try:
bulk_write_result = yield db.collections.probe.insert(dataarray, continue_on_error=True)
nr_inserts = bulk_write_result["nInserted"]
except pymongo.errors.DuplicateKeyError as e:
nr_inserts = ???? <--- what should I put here?

由于抛出异常,bulk_write_result 为空。显然我可以(并发问题除外)在插入之前和之后对整个集合进行计数,但我不喜欢为了日志文件中的一行而额外往返数据库。那么有什么方法可以发现实际插入了多少条记录?

最佳答案

我不清楚您为什么yield 您的插入结果。但是,关于 bulk inserts :

  • 你应该使用insert_many作为insert已弃用;
  • ordered 关键字设置为 False 时,如果出现错误,您的插入将继续;
  • 如果出现错误,insert_many 将引发 BulkWriteError , 您可以查询以获得插入文档的数量。

所有这些都会导致类似的事情:

try:
insert_many_result = db.collections.probe.insert_many(dataaray,ordered=False)
nr_inserts = len(insert_many_result.inserted_ids)
except pymongo.errors.BulkWriteError as bwe:
nr_inserts = bwe.details["nInserted"]

如果您需要确定写入错误背后的原因,您将必须检查bwe.details['writeErrors'] 数组。代码值 11000 表示“重复键错误”:

>>> pprint(e.details['writeErrors'])
[{'code': 11000,
'errmsg': 'E11000 duplicate key error index: test.w.$k_1 dup key: { : 1 }',
'index': 0,
'op': {'_id': ObjectId('555465cacf96c51208587eac'), 'k': 1}},
{'code': 11000,
'errmsg': 'E11000 duplicate key error index: test.w.$k_1 dup key: { : 3 }',
'index': 1,
'op': {'_id': ObjectId('555465cacf96c51208587ead'), 'k': 3}}

在这里,如您所见,我尝试在 test 数据库的 w 集合中插入两个文档。由于重复键错误,两次插入均失败。

关于mongodb - 在具有重复键的批量插入中查找插入文档的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com