【问题标题】:Mongoose: how to use index in aggregate?Mongoose:如何在聚合中使用索引?
【发布时间】:2020-03-22 12:41:13
【问题描述】:

如何使用聚合索引?

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

当 $match 和 $sort 管道运算符出现在管道的开头时,它们可以利用索引。

有没有什么方法可以使用索引而不是开始的情况?

喜欢$sort$match$group

请帮帮我

【问题讨论】:

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


    【解决方案1】:

    索引的工作原理是保存指向集合中给定记录的某些数据片段的记录。可以把它想象成有一本小说,然后有一张纸,上面列出了小说中不同人物或地点的名字,以及他们被提及的页码。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 2016-01-28
      • 2020-01-02
      • 2017-10-19
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多