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提供一个快速的.完整的教程.这篇文章围绕 ...
随机推荐
- 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第二周:整体性总结)
20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第二周:整体性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...
- debian安装mongoDB
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz tar zxf mongodb-linux-i686-1.8.2.t ...
- Sorting It All Out (拓扑排序+floyd)
An ascending sorted sequence of distinct values is one in which some form of a less-than operator is ...
- CSS-Sass
什么是css预处理器
- Android-Layer list
Android-Layer list 学习自: KEEGAN小钢 原文链接 : (https://keeganlee.me/post/android/20150909) 使用layer-list 可以 ...
- IO操作、PIL使用、Django的admin操作
操作内存的流-StringIO | BytesIO from io import StringIO, BytesIO #创建操作字符串的内存流 sf = StringsIO() #往内存中写 sf.w ...
- Mysql概念及基本操作
1.Mysql 概念 1.1 定义 数据库本质是一个C/S的套接字软件 关系型数据库:MySQL mariadb db2 非关系型:存取数据是以key:Value mongodb redis 1.2 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习2
#include <iostream> #include <cctype> using namespace std; const int MAXSIZE=10; int mai ...
- selenium3+java+POM 跨浏览器测试之------读取配置文件
我们知道,web 测试的时候是需要切换不同的浏览器以查看每个功能在不同浏览器上的运行情况,使得开发的程序更具有健壮性.本文先总结一下如何通过读取配置文件来切换浏览器. 具体步骤如下: 一.编写配置文件 ...
- Cmake知识----编写CMakeLists.txt文件编译C/C++程序
1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...