官方介绍:https://docs.mongodb.org/manual/core/index-partial/

mongodb3.2支持对某个集合的部分数据创建索引.如给年龄大于十八岁的数据创建索引等.
实例如下:
数据库里User集合数据如下:
{
"_id" : ObjectId("568b7b738816d80cf9829898"),
"name" : "孙红",
"age" : 22.0,
"sex" : "女"
}
{
"_id" : ObjectId("568e06819cb04bbbc5e5de72"),
"name" : "张三",
"age" : 10,
"sex" : "男"
}
{
"_id" : ObjectId("568e06dd9cb04bbbc5e5de76"),
"name" : "李四",
"age" : 15,
"sex" : "男"
}
{
"_id" : ObjectId("568e06f09cb04bbbc5e5de78"),
"name" : "赵六",
"age" : 30,
"sex" : "女"
}

创建部分索引
db.User.createIndex(
{name:1},
{partialFilterExpression:{age:{$gte:18}}}
)

测试结果如下:
db.User.find({name:"赵六"}); --没有触发索引,因为age范围无法确定
db.User.find({name:"赵六",age:{$gte:20}}); --触发索引 满足age>18且使用了索引字段name
db.User.find({sex:"女",name:"赵六",age:{$gte:20}}); --触发索引 mongodb会自动优化查询语句,先使用name字段上的索引查询.
db.User.find({sex:"女"},age:{$gte:20}); --没有触发索引 因为没有用到索引字段name
db.User.find({age:{$gte:20}}); --没有触发索引 因为没有用到索引字段name
db.User.find({name:"赵六",age:{$lte:20}}) --没有触发索引 因为不满足条件age>18
结论:
触发局部索引的条件是返回的结果集在创建索引的条件范围内且使用到了索引字段。

其他限制
1._id不能创建局部索引
2.不能根据不同的筛选条件而创建多个局部索引;例如,如果我们接着使用上面的User集合,创建另一个索引
db.User.createIndex({name:1},{partialFilterExpression:{sex:{$exists:true}}}) //这个索引会创建失败.

MongoDB3.2新特性之部分索引的更多相关文章

  1. MongoDB3.2新特性之文档验证

    官方参考: https://docs.mongodb.org/master/core/document-validation/ 文档验证是3.2的重要新特性,添加验证条件的情形无非两种,一是在创建集合 ...

  2. MongoDB3.0新特性

    3月3日,MongoDB3.0终于发布了. 主要特点包括了对之前收购的WiredTiger存储引擎的支持,插件式存储引擎API,SCRAM-SHA-1认证机制,并改进了解释功能.此外,包含了自动化.备 ...

  3. Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

    Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1.   设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...

  4. PostgreSQL 11 新特性之覆盖索引(Covering Index)(转载)

    通常来说,索引可以用于提高查询的速度.通过索引,可以快速访问表中的指定数据,避免了表上的扫描.有时候,索引不仅仅能够用于定位表中的数据.某些查询可能只需要访问索引的数据,就能够获取所需要的结果,而不需 ...

  5. SQL Server 2014新特性:分区索引重建

    <single_partition_rebuild_index_option> ::= {     SORT_IN_TEMPDB = { ON | OFF }   | MAXDOP = m ...

  6. C# 6新特性及示例代码

    今天推荐的其实是一个Github开源项目,不过这个开源项目是专门介绍C# 6的最新特性,并给出了示例代码. 我们知道,微软即将发布Windows 10和Visual Studio 2015,在VS20 ...

  7. 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

    原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net ...

  8. 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model

    原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...

  9. MySQL 5.7新特性之Generated Column(函数索引)

    MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

随机推荐

  1. OK Titlefasdf asd

    Do a lot of material ! asdfa sdgadfasdg Android  is ok, IOS is also ok.

  2. day16匿名函数

    匿名函数,好像也就是 lambda 表达式 先来看一段函数,返回 def func(n): return n * 3 print(func(5))15 用lambda表达式写: func = lamb ...

  3. Hadoop 设置任务执行的队列以及优先级

    转自:http://blog.csdn.net/wisgood/article/details/39075883 作业提交到的队列:mapreduce.job.queuename 作业优先级:mapr ...

  4. RecyclerView滑动到指定位置,并置顶

    一般我们用 mRecycleview.smoothScrollToPosition(0)滑动到顶部,具有滚动效果,但是如果我们想滚动到任意指定位置,那么smoothScrollToPosition() ...

  5. 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...

  6. PostgreSQL自学笔记:7 插入、更新与删除数据

    7 插入.更新与删除数据 7.1 插入数据 先创建表person: create table person( id int not null, name char(40) not null defau ...

  7. oracle12 group by 拼接字符串

    select listagg(合并字段,'连接符号') within group (order by 排序字段) as 别名 from 表 group by 字段

  8. [LeetCode] All Paths From Source to Target 从起点到目标点到所有路径

    Given a directed, acyclic graph of N nodes.  Find all possible paths from node 0 to node N-1, and re ...

  9. Solve Error: "errcode": 48001, "errmsg": "api unauthorized hint"

    当你想给微信公众号(不是测试账号)自定义菜单创建接口,遇到如下错误: OK Connection: keep-alive Date: Sat, 01 Dec 2018 05:02:08 GMT Con ...

  10. ArcGIS AddIn 批量设置栅格图层背景色为透明

    protected override void OnClick() { // // TODO: Sample code showing how to access button host // Arc ...