我和我的团队对Mongo管道有一些疑问。
我们有一个用于处理大量文档的管道。在此管道中,我们使用$group
阶段。但是,此阶段的硬编码限制为100MB,不足以容纳我们拥有的文档数量(https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/#memory-restrictions)。
我们实现的解决方案是在流水线的开始阶段结合$skip
和$limit
阶段,以便按批处理N个文档(其中N是一个选择的数字,所以一个批处理) N个文件的重量小于100MB)。
但是,此解决方案存在性能问题,因为$skip
阶段变慢了
随着要跳过的文档数量的增加(https://arpitbhayani.me/techie/mongodb-cursor-skip-is-slow.html)。
然后我们找到了这篇文章:https://arpitbhayani.me/techie/fast-and-efficient-pagination-in-mongodb.html。描述的第二种方法对于我们的用例似乎是一个很好的解决方案。我们想实施这种方法。但是,要使其正常工作,必须在管道开始时通过内部Mongo ID(_id
)对文档进行排序。我们曾考虑过使用$sort
阶段,但是该阶段也有一个硬编码的100MB限制。
我们可以使用什么方法来确保在管道开始时按_id
对文档进行排序?
也许还有另一种解决方案,以批量小于100MB处理文档?