【问题标题】:MongoDB Bulkwrite which queries failed at match step?MongoDB Bulkwrite 哪些查询在匹配步骤失败?
【发布时间】:2018-11-22 23:37:05
【问题描述】:

我正在 MongoDB 中进行批量写入操作以一次更新多个文档。

现在有什么方法可以让我知道我的查询的哪个序列号匹配步骤失败了。

因为在返回的文档中我得到了nModifiednMatched,它告诉了有多少匹配失败,但不是哪个查询序列号失败了?

【问题讨论】:

  • 简而言之,不。你只会得到计数。这些不是“错误”,因此认为不需要报告它们或在批次的哪个索引处返回0。一个非常常见的使用模式是实际发送几个更新请求,而您实际上只希望其中“一个”实际匹配并执行任何操作。所以这并不是一个高需求的功能。如果你认为你需要这个,那么你就不会批量发送请求,而只是发送单个请求并检查结果。这是入场费。

标签: mongodb bulk-operations


【解决方案1】:

您可以使用BulkWriteResult.writeErrors。它可用于有序和无序操作模式。具体来说,“op”字段会告诉您失败的文档。

这是 pymongo reference 的示例输出:

{'nInserted': 0,
'nMatched': 1,
'nModified': 1,
'nRemoved': 0,
'nUpserted': 0,
'upserted': [],
'writeConcernErrors': [],
'writeErrors': [{u'code': 11000,
              u'errmsg': u'...E11000...duplicate key error...',
              u'index': 1,
              u'op': {'_id': 4}}]}

【讨论】:

  • 我想知道查询是否找到任何文档,所以它不会出错。
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 2010-09-08
  • 2020-06-15
  • 1970-01-01
  • 2016-05-17
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多