Mongoose:如何在聚合中使用索引?
Posted
技术标签:
【中文标题】Mongoose:如何在聚合中使用索引?【英文标题】:Mongoose: how to use index in aggregate? 【发布时间】:2020-03-22 12:41:13 【问题描述】:如何使用聚合索引?
看到文档https://docs.mongodb.com/manual/core/aggregation-pipeline/#pipeline-operators-and-indexes
当 $match 和 $sort 管道运算符出现在管道的开头时,它们可以利用索引。
有没有什么方法可以使用索引而不是开始的情况?
喜欢$sort
,
$match
或 $group
请帮帮我
【问题讨论】:
【参考方案1】:索引的工作原理是保存指向集合中给定记录的某些数据片段的记录。可以把它想象成有一本小说,然后有一张纸,上面列出了小说中不同人物或地点的名字,以及他们被提及的页码。
聚合就像拿那本小说并将不同的页面转换成完全不同的信息流。在转换实际发生之前,您不知道新信息的位置,因此您不可能对转换后的信息建立索引。
换句话说,不可能在任何聚合管道阶段使用索引,因为该数据将被转换,而 MongoDB 甚至无法知道是否有可能有效地利用新的转换后的数据。
如果您的聚合管道太大而无法有效处理,那么您需要以某种方式限制管道的大小,以便更有效地处理它。理想情况下,这意味着拥有一个$match
阶段,足以将文档限制在一个合理大小的子集中。然而,这并不总是可行的,因此可能需要额外的努力。
一种可能性是生成“汇总”文档,这些文档是将所有新数据聚合在一起的结果,然后仅使用这些汇总文档执行您的主要聚合管道。例如,如果您希望汇总系统中的交易日志,那么您可以生成当天记录的不同交易的数量和类型的每日摘要,以及您需要的任何其他附加数据。需要。然后,您将聚合管道限制为仅这些每日摘要文档,并避免使用正常的交易文档。
但是,实际解决方案超出了此问题的范围。请注意,索引使用是您无法避免的限制。
【讨论】:
以上是关于Mongoose:如何在聚合中使用索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)