MongoDB“索引过滤器”和“过滤索引”

时间:2016-03-21 22:10:41

标签: mongodb

尝试告诉(提示)mongo在看到某些查询表单时使用哪个索引。我可以给游标一个提示,但是当使用从匹配阶段开始的聚合时,这将没有用。

为此,mongo提供了“注册”查询表单的功能,并指定查询计划程序可以协调的索引。霍拉认为我:因为那样就可以做我想做的事。

给出一个看起来像这样的文档架构:

models/

和索引:

{ 
   Domain : "google.com",
   LocalPart : "james.bond",
   Status :  5
}

通过注册集合的索引过滤器:

{ Status : 1, Domain : 1, LocalPart : 1 }
{ Status : 1 }

当我跑步时:

db.runCommand(
   {
      planCacheSetFilter: "testColl",
      query: { Status : 999, "Domain" : "Y" },      
      indexes: [ { Status : 1 } ]
   }
)

获胜计划使用索引的索引扫描:

testColl.find( { Status : 5, Domain : "google.com" } ).explain()

正如希望的那样。生活很好。 (我知道这不是真正的最佳指数,但这就是我想要的那个)

但问题是,index {Status:1}实际上是一个“过滤索引”,只包含“Status = 5”,所以我重新声明索引为:

{ Status : 1 }

当我重新运行查询时,获胜计划现在是集合扫描 !!!

我无法找到为什么或如何让“索引过滤器”使用“过滤索引”。

所以问题就变成了:有可能吗?如果是这样,语法是什么?

感谢名单!

ps:请使用“过滤索引”保留对“索引过滤器”主题的回复。告诉我,对于提供的示例,除非您看到一般案例和特殊案例金锤模式,否则它不是最有效的方式。 :)

1 个答案:

答案 0 :(得分:0)

我认为你应该使用这种形式的索引:

index