如何在不使用$ skip的情况下在Mongo管道中批量处理文档?

时间:2018-08-24 08:59:04

标签: mongodb aggregation-framework

我和我的团队对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处理文档?

0 个答案:

没有答案