如何解决Mongodb Atlas-不支持大于50的管道长度
当我在Atlas mongo服务器上对mongodb使用mongoose时,会出现以下错误:不支持大于50的mongo管道长度。 我已经在整个网上搜索了此内容。找不到解决方法。 有没有解决的办法?
解决方法
之所以发生这种情况,是因为您在一个聚合中使用了过多的管道。 如果要使用50个以上的管道阶段,则可以使用$ facet。 以下工作流程可能会有所帮助:
- 将管道分成几个块(每个块中的管道阶段不得超过50个)。
- 运行构面后,可以像正常一样使用$ unwind将结果分成单独的文档(您可能需要重组数据以使用$ project恢复以前的格式)。
- 如果需要,可以在此之后进行其他操作。
在这种情况下,如果您计划在一个聚合中运行150个阶段,请将它们分成4-5个块,请确保每个块都必须使用相同的作用域,以避免引起“遗漏”或“未定义变量”的情况,您也可以$ unwind来恢复文档格式以运行下一个块。
确保每个输出文档都不能超过16MB,这就是为什么我建议在$ facet之后使用$ unwind(在此阶段中可以超过16MB)。原因是$ facet会将所有内容输出到1个文档中,并在其中包含一系列文档(如果要显示所有文档),因此$ unwind会将这些“内部”文档分离为单独的文档。
对此的一个注意事项是,您可以尝试限制字段名称,以防止BufBuilder超过最大大小(64MB)。尝试使用$ project代替$ addFields,因为这会增加每个阶段之间的缓冲区。
另一个问题是,如果您使用的是MongoDB Atlas 如果为您遇到的问题提供伪代码可能会更好,但我认为这可以解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。