官方介绍: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. kettle使用文件导入到Postgresql出现如下几种问题的总结

    1.kettle使用文件导入到Postgresql出现如下几种问题的总结: kettle使用文件导入到Postgresql出现如下几种问题的总结: .第一种错误,报错如ERROR: extra dat ...

  2. CentOS7上RabbitMQ安装

    因为RabbitMQ是由erlang实现的,所以要先安装erlang再安装rabbitMQ 一.配置yum软件源地址EPEL(EPEL是管理yum下载软件的软件,也可以说是一个软件仓库)后安装erla ...

  3. 关于input的检验问题

    写了很多小应用 但是 对于input有很多 相同的需求 在这里做一个总结 将用的多的校验方法 封装为方法 使用 1.只能输入正整数的校验 输入的时候同时校验 将字符类型的全部替换为空 <inpu ...

  4. Linux系统下安装JDK

    注意:linux系统下使用mount命令挂载Windows系统下的共享文件,详情见我的另一篇“Linux系统挂载Windows系统下的共享文件” 一.安装jdk 1.进入usr目录cd /usr 2. ...

  5. Spark之join、leftOuterJoin、rightOuterJoin及fullOuterJoin

    Spark的join与mysql的join类似,mysql的join是将表与表之间连接查询,spark中join是将RDD数据集进行连接,Spark主要有join.leftOuterJoin.righ ...

  6. 【ABP】工作单元——不进行事物独立执行功能

    1.注入 private readonly IUnitOfWorkManager unitOfWorkManager; 2.构造 3.开启新事物 using (var unitOfWork = uni ...

  7. Spring Cloud微服务笔记(三)服务治理:Spring Cloud Eureka快速入门

    服务治理:Spring Cloud Eureka 一.服务治理 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现. 1.服务注册: 在服务治理框架中,通常会构 ...

  8. (Android UI)Action Bar

    Action Bar 指明用户当前所在的界面,添加多个功能性按键和下拉式选择框,以提供能多功能. 主题一:让应用具备ActionBar 可能条件一:Support Android 3.0(API 11 ...

  9. 执行Android后台任务的最佳实践

    灵活执行后台任务可以帮助提升应用性能,并最小化电量损耗. Android后台任务主题包含以下三个子主题: 1. 在IntentService中执行后台任务: 2. 使用CursorLoader在后台加 ...

  10. 入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试

    黑盒测试 黑盒测试把产品软件当成是一个黑箱子,只有出口和入口,测试过程中只要知道往黑盒中输入什么东西,知道黑盒会出来什么结果就可以了,不需要了解黑箱子里面是如果做的. 即测试人员不用费神去理解软件里面 ...