【问题标题】:'Document constructed by $facet exceeds the limit' with allowDiskUse:true'$facet 构造的文档超过了限制' with allowDiskUse:true
【发布时间】:2022-01-22 16:14:01
【问题描述】:

我目前正在使用 mongoDb v4.4 和 Mongoose v5.10。并在我的聚合查询中通过 $facet 获得限制超出错误,该查询使用 allowDiskUse: true 选项提供大量响应。

MongoError: document constructed by $facet is 104859602 bytes, which exceeds the limit of 104857600 bytes

在我使用 mongoDb v3.4 和 Mongoose v4.13 之前,它运行良好。

在使用构面创建聚合管道并使用aggregate.allowDiskUse(true) 后,mongo 查询日志确实显示了 allowDiskUse 标志为 true 但仍然出现错误的查询。

【问题讨论】:

标签: node.js mongodb mongoose aggregate facet


【解决方案1】:

因为这个 $facet 阶段超过了 16 兆字节的 BSON 文档大小限制。

参考$facet consideration:

$facet 阶段的输出受限于 16 兆字节的 BSON 文档大小限制。如果 $facet 阶段的结果超过 BSON 文档大小限制,则聚合会产生错误。


在你的情况下,也许这个配置命令会有所帮助

db.adminCommand({setParameter: 1, internalQueryFacetBufferSizeBytes: BIGGER_THAN_100MB })

【讨论】:

  • 但是错误是关于 100MB 的限制,所以它是暗示的吗? "$facet构造的文档是104859602字节,超过了104857600字节的限制"
  • 不,错误与文档大小有关,因为它显示“文档由...构建”。应隐含为:'$facet构造的文档为104859602字节,超过了16*1024*1024字节的限制'
  • 我已经更新了即将发生的实际错误的问题。你能看看它显示了 100MB 的限制
  • 好像$facetstage 不能使用磁盘,根据mongodb documnetation。您能否按照说明提供日志消息: > 从 MongoDB 4.2 开始,如果任何聚合阶段由于内存限制而将数据写入临时文件,则分析器日志消息和诊断日志消息包括 usedDisk 指示符。
  • jira.mongodb.org/browse/SERVER-40317 你能检查一下吗。 allowDiskUse 不再用于构面了吗?
猜你喜欢
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多