Mongodb Mongo聚合框架中的投影优化

Mongodb Mongo聚合框架中的投影优化,mongodb,aggregation-framework,Mongodb,Aggregation Framework,请查看此链接以了解我的问题 它说,优化将投影应用于头部,只返回_id&amount。现在在投影之后,状态字段上有匹配项。但是项目的结果没有这些字段,那么它如何匹配结果并过滤它们。您实际的问题有点“抽象”,但为了验证这一点,您真正想做的是在管道的第一阶段按照您的条件进行优化: db.collection.aggreagte([ //先比赛 {“$match”:{“status”:true}, //管道的其余部分 ]) 主要的“原因”是你可以用第一阶段来处理一个索引。如果您稍后在管道中这样做,那么

请查看此链接以了解我的问题


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

您实际的问题有点“抽象”,但为了验证这一点,您真正想做的是在管道的第一阶段按照您的条件进行优化:

db.collection.aggreagte([
//先比赛
{“$match”:{“status”:true},
//管道的其余部分
])
主要的“原因”是你可以用第一阶段来处理一个索引。如果您稍后在管道中这样做,那么您可以而不是


因此,请尝试以这种方式进行优化,始终

仔细阅读:“优化阶段将投影应用到管道的头部,以便在$match阶段的结果文档中也只返回_id和amount字段。”那与你无关projection@Sammaye索引上的匹配只发生在管道的初始阶段。不能与该阶段之后的索引匹配。你明白了吗?Samaya你有我的问题@尼尔,我想文档上说它会运行投影,发射id和数量,然后匹配。由于输出没有“状态”,它将如何过滤记录。行“MongoDB将投影应用于管道的头部”是否意味着投影将首先应用或在匹配后应用。@user3440520实际上,原因是“匹配”将仅在“头部”或第一阶段应用,以这种方式。正如我所指出,这样做是最佳做法。从最初对您的问题所做的“评论”来看,您需要“投影”您打算在任何进一步的管道阶段中使用的字段。否则,如果没有显式项目,它们就无法使用。所以你真的应该先“匹配”。明白吗?