planCacheSetFilter
¶为集合设置索引过滤器。如果查询形状已经存在索引过滤器,则该命令将覆盖先前的索引过滤器。
该命令具有以下语法:
该planCacheSetFilter
命令具有以下字段:
领域 | 类型 | 描述 |
---|---|---|
planCacheSetFilter |
串 | 集合的名称。 |
query |
文献 | 与索引过滤器关联的查询谓词。再加上 仅谓词的结构(包括字段名)是重要的;查询谓词中的值不重要。因此,查询谓词涵盖仅值不同的类似查询。 |
sort |
文献 | 可选的。与过滤器关联的排序。与query 和一起projection ,sort 构成指定索引过滤器的查询形状。 |
projection |
文献 | 可选的。与滤镜关联的投影。与query 和一起sort ,projection 构成指定索引过滤器的查询形状。 |
indexes |
数组 | 用于指定查询形状的索引过滤器数组。 将索引过滤器指定为:-索引规范文档
数组,例如-索引名称数组,例如 因为查询优化器在收集扫描和这些索引之间进行选择,所以如果索引不存在,则优化器将选择收集扫描。 如果多个索引具有相同的键模式,则必须按名称指定索引。 |
索引过滤器仅在服务器进程期间存在,并且在关闭后不会持久;但是,您也可以使用以下planCacheClearFilters
命令清除现有的索引过滤器。
用户必须具有包含planCacheIndexFilter
操作的访问权限
。
下面的示例在orders
集合上创建索引过滤器,以便对于仅由status
字段上的相等匹配组成的查询,而没有任何投影和排序,查询优化器仅评估两个指定的索引,并对获胜计划进行集合扫描:
在查询谓词中,只有谓词的结构(包括字段名称)是有效的。这些值无关紧要。这样,创建的过滤器将应用于以下操作:
要查看MongoDB是否对查询形状应用索引过滤器,请检查或
方法的indexFilterSet
字段。db.collection.explain()
cursor.explain()
以下示例为orders
集合创建索引过滤器。该过滤器适用于谓词与item
字段上的等式匹配的查询,其中仅quantity
投影该字段,并order_date
指定升序排序依据。
对于查询形状,查询优化器将仅考虑使用index的索引计划。{ item: 1, order_date: 1, quantity: 1 }