【问题标题】:Projection Optimization in Mongo Aggregation FrameworkMongodb聚合框架中的投影优化
【发布时间】:2014-05-04 19:56:36
【问题描述】:

请查看此链接以了解我的问题。 http://docs.mongodb.org/manual/core/aggregation-pipeline-optimization.

它说优化将投影应用于头部并仅返回 _id 和数量。现在投影后状态字段匹配。但是项目的结果没有那些字段,那么它如何匹配结果并过滤它们。

【问题讨论】:

  • 仔细阅读:“优化阶段将投影应用到管道的头部,这样在 $match 阶段的结果文档中也只有 _id 和金额字段返回。”跨度>

标签: mongodb aggregation-framework


【解决方案1】:

您的实际问题有点“抽象”,但为了验证这一点,您真正想做的最佳 优化$match 根据您的条件在管道的第一阶段:

db.collection.aggreagte([

    // Match first
    { "$match": { "status": true } },

    // Rest of the pipeline

])

主要的“原因”是您可以实际上 处理第一阶段的索引。如果您稍后在管道中这样做,那么您可以

所以尝试以这种方式优化,总是

【讨论】:

  • 这与投影无关
  • @Sammaye 对索引的匹配发生在管道的初始阶段。您不能 match 与超出该阶段的 index。这会让你清楚吗?
  • Samaya 你有我的问题。 @Neil,我认为文档说它将运行投影,发出 _id 和数量然后匹配。由于输出没有“状态”,它将如何过滤记录。“MongoDB 将投影应用到管道的头部”行是否意味着投影将首先应用,或者将在匹配后应用。
  • @user3440520 实际上,这样做的原因是“匹配”将应用于“头部”或第一阶段,在此大大地。正如我所指出的,这样做是最佳实践。从对您问题的最初“评论”开始,您需要“预测”您打算在任何进一步的管道阶段使用的字段。否则,它们只是可用于没有 显式项目。所以你真的应该“匹配”首先。明白了吗?
猜你喜欢
  • 2013-11-04
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多