尝试告诉(提示)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:请使用“过滤索引”保留对“索引过滤器”主题的回复。告诉我,对于提供的示例,除非您看到一般案例和特殊案例金锤模式,否则它不是最有效的方式。 :)
答案 0 :(得分:0)
我认为你应该使用这种形式的索引:
index