MongoDB3.2新特性之部分索引
官方介绍: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新特性之部分索引的更多相关文章
- MongoDB3.2新特性之文档验证
官方参考: https://docs.mongodb.org/master/core/document-validation/ 文档验证是3.2的重要新特性,添加验证条件的情形无非两种,一是在创建集合 ...
- MongoDB3.0新特性
3月3日,MongoDB3.0终于发布了. 主要特点包括了对之前收购的WiredTiger存储引擎的支持,插件式存储引擎API,SCRAM-SHA-1认证机制,并改进了解释功能.此外,包含了自动化.备 ...
- Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护
Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1. 设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...
- PostgreSQL 11 新特性之覆盖索引(Covering Index)(转载)
通常来说,索引可以用于提高查询的速度.通过索引,可以快速访问表中的指定数据,避免了表上的扫描.有时候,索引不仅仅能够用于定位表中的数据.某些查询可能只需要访问索引的数据,就能够获取所需要的结果,而不需 ...
- SQL Server 2014新特性:分区索引重建
<single_partition_rebuild_index_option> ::= { SORT_IN_TEMPDB = { ON | OFF } | MAXDOP = m ...
- C# 6新特性及示例代码
今天推荐的其实是一个Github开源项目,不过这个开源项目是专门介绍C# 6的最新特性,并给出了示例代码. 我们知道,微软即将发布Windows 10和Visual Studio 2015,在VS20 ...
- 返璞归真 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 ...
- 返璞归真 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 ...
- MySQL 5.7新特性之Generated Column(函数索引)
MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...
随机推荐
- Java _类 相关知识
成员变量 java对象的属性就是成员变量,其实成员变量就是指普通的变量,可以设置初始值,也可以不设置.当不设置时,会被设置为默认值.(当成员变量前面有private关键词时,说明定义了一个私有成员) ...
- angularJs实现数据双向绑定的原理
angular1.x在指定的事件触发时(比如dom事件,xhr响应事件,浏览器定位变更事件,定时器事件),通过脏值检测的方式比对数据是否有变更,来决定是否更新视图. angular2使用了zone.j ...
- 开源搜索引擎solr elasticsearch学习计划
其实不单单是研究solr elasticsearch把,进行调研性技术学习时,应该制定一些目标以及里程碑.新的技术调研 学习是一件很爽的事,能学到新技术新东西.但是在学习新技术同时,有几个问题是需要我 ...
- 使用 Java 将多个文件压缩成一个压缩文件
使用 Java 将多个文件压缩成一个压缩文件 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZipMultiFile.java pac ...
- BZOJ.3566.[SHOI2014]概率充电器(概率DP 树形DP)
BZOJ 洛谷 这里写的不错,虽然基本还是自己看转移... 每个点的贡献都是\(1\),所以直接求每个点通电的概率\(F_i\),答案就是\(\sum F_i\). 把\(F_x\)分成:父节点通电给 ...
- 使用CSS选择器实现选择指定子节点
HTML CSS 具体效果 其他事例 事例图片来自MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/:nth-child
- 15树莓派安装图形界面截图工具Shutter
2017-09-27 13:02:54 参数-添加/删除软件-搜索软件名称“shutter”,勾选,点击“应用”,等待安装完成后点击“确定”.(需下载安装包后安装) 补充:更多截图软件可以https: ...
- [POJ1050]To the Max (矩阵,最大连续子序列和)
数据弱,暴力过 题意 N^N的矩阵,求最大子矩阵和 思路 悬线?不需要.暴力+前缀和过 代码 //poj1050 //n^4暴力 #include<algorithm> #include& ...
- django 小东小西
1.request.META里包含了哪些数据? request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版 ...
- h5 canvas与SVG的比较
画布 什么是canvas? HTML5的canvas标签使用JavaScript可以在网页上绘制图像,画布为一个矩形. 画布本身没有绘制能力,只能通过脚本来绘制. 画布例子: <canvas i ...