官方介绍: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. Hibernate使用sql语句实现多表关联查询

    /** * <查找list> * * @return 返回页面需要显示的数据 */ @SuppressWarnings("unchecked") public List ...

  2. Mybatis 通用 Mapper 和 Spring 集成

    依赖 正常情况下,在原有依赖基础上增加的 mapper-spring. <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spr ...

  3. XVII Open Cup named after E.V. Pankratiev. GP of Moscow Workshops

    A. Centroid Tree 枚举至多两个重心作为根,检查对于每个点是否都满足$2size[x]\leq size[father[x]]$即可. #include<stdio.h> # ...

  4. Object类的方法

    一 Object:类Object是类层次结构的跟类,每个类都使用Object作为超类,每个类都是直接或者间接的继承自Object类. Object类的方法: ①public int hashCode( ...

  5. 11_ for 练习 _ Math.sqrt

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. 【函数式编程】reducer为什么叫reducer

    最近学习前端的技术,在了解react对DOM的组件抽象,但不提供整体的组件通讯时候,了解了redux,然后就是react-redux: 抽象后,视图完全由对象决定,而用户只能接触视图,所以对象的改变必 ...

  7. MYSQL 导入导出数据库文件

    一.从数据库导出数据库或表文件: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysqldump -h localhost -uroot ...

  8. discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)

    在应用 -> 积分商城 -> 常用设置 中添加 商场首页排序方式 的背景颜色修改功能 步骤: 1.找到并打开此页面对应的模板source\plugin\aljsc\template\set ...

  9. C#基础概念总结

    C#基础概念总结 1..NET Framework概念 2. C#的含义: 3.什么是面向对象编程: 4.Visual Studio开发工具: 5..NET程序运行的机制: 1..Net Framew ...

  10. hadoop三个配置文件的参数含义说明

    1       获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知 ...