猫鼬:如何汇总使用索引?

时间:2019-11-27 02:13:31

标签: node.js mongodb mongoose mongodb-query aggregation-framework

如何综合使用索引?

我看到了文档https://docs.mongodb.com/manual/core/aggregation-pipeline/#pipeline-operators-and-indexes

  

$ match和$ sort管道运算符可以在索引出现在管道开头时加以利用。

有没有什么可以使用索引的方法呢?

$sort一样, $match$group

请帮助我

1 个答案:

答案 0 :(得分:0)

索引的作用是保留指向集合中给定记录的某些数据的记录。认为它就像是一本小说,然后有一张纸列出了该小说中各个人物或地点的名称,以及提及他们的页码。

聚合就像拿那本小说,然后将不同的页面转换成完全不同的信息流一样。在转换真正发生之前,您不知道新信息的位置,因此您不可能在转换后的信息上建立索引。

换句话说,不可能在不是一开始的任何聚合管道阶段都使用索引,因为该数据将被转换,并且MongoDB无法知道是否有可能有效利用新数据。转换后的数据。

如果聚合管道太大而无法有效处理,则需要以某种方式限制管道的大小,以便可以更有效地处理它。理想情况下,这意味着要有一个$match阶段,足以将文档限制为合理大小的子集。但是,这并非总是可能的,因此可能需要额外的努力。

一种可能性是生成“摘要”文档,这些文档是将所有新数据聚合在一起的结果,然后仅使用这些摘要文档执行主聚合管道。例如,如果您希望汇总系统中的交易记录,则可以生成每日摘要,记录当天已记录的不同交易的数量和类型,以及其他任何附加数据需要。然后,您可以将汇总管道限制为仅这些每日摘要文档,而避免使用常规的交易文档。

但是,实际解决方案不在此问题的范围内。请注意,索引的使用是您无法避免的限制。