`
shingo7
  • 浏览: 19356 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

MongoDB官方文档翻译系列之---索引交集

阅读更多

【无耻的打个小广告】: 接下来我会陆续发出一些翻译文档,第一时间会发在我的微信公众号上,欢迎大家订阅我(公众号:mongodb_side)

 

 

索引交集

github版本 - 119de9c84cb178c60c13b69774831d507be7e63a


  2014-03-18官方文档快照翻译(v2.6.0

翻译、编辑陈杰6623662005@163.com

 

2.6新增。

MongoDB可以使用多个索引的交集来实现查询。[1] 一般来说,每个索引交集涉及2个索引;但是MongoDB可以使用多个/嵌套索引交集来处理一个查询。

举例说明一下索引交集,有个orders集合包含下面2个索引:

{ qty:1 }

{ item:1 }

 

MongoDB能使用这两个索引的交集来支持下边的查询:

db.orders.find( { item:"abc123", qty: { $gt:15 } } )

对于使用了索引交集的查询计划,explain()显示的结果会在cursor 字段中返回Complex Plan值。

[1]

之前的版本只能用单索引来实现大多数查询。只有一种情况是例外的,当查询中有 $or操作符时,每个$or条件都可以单独使用一个索引。

 

索引前辍交集

MongoDB可以使用整个索引来做交集,也可以使用索引辍来做交集。索引前辍是复合索引的子集,从第一个索引开始的一个或多个索引。

假设集合 orders 有如下索引:

{ qty:1 }

{ status:1, ord_date:-1 }

下面这个查询指定了两个条件qty statusMongoDB可以用上面两个索引的交集来实现查询:

db.orders.find( { qty: { $gt:10 } , status:"A" } )

索引交集和复合索引

索引交集并没有消减对复合索引的需求。但是因为复合索引的定义顺序(即复合索引定义的先后顺序)和排序方向(即升序或降序)对于复合索引来说是有关系的,复合索引可能不能支持那种查询条件不包含索引前辍或者不按指定排序方向的查询。

例如,集合orders有下面这个复合索引,status字段在ord_date字段前面:

{ status:1, ord_date:-1 }

这个复合索引可以支持下面的查询:

db.orders.find( { status: { $in: ["A", "P" ] } } )

db.orders.find(

   {

     ord_date: { $gt:newDate("2014-02-01") },

     status: {$in:[ "P", "A" ] }

   }

)

但是下面两个查询不支持:

db.orders.find( { ord_date: { $gt:newDate("2014-02-01") } } )

db.orders.find( { } ).sort( { ord_date:1 } )

但是,如果集合有两个单独的索引:

{ status: 1 }

{ ord_date: -1 }

这两个索引可以通过单独或索引交集的方式支持以上4个查询。

其实就是在通过具体的系统需求情况在创建复合索引和索引交集中做权衡选择。

另见

复合索引,创建复合索引来支持一些不同的查询。

 

索引交集和排序

sort()操作需要一个完全单独于查询条件的索引的话,不适合用索引交集。

举个例子orders集合有下面几个索引:

{ qty:1 }

{ status:1, ord_date:-1 }

{ status:1 }

{ ord_date:-1 }

MongoDB不能将索引交集使用在下面这个带排序的查询上:

db.orders.find( { qty: { $gt:10 } } ).sort( { status:1 } )

也就是说,MongoDB不能使用{ qty: 1 } 来做查询,并且用单独的{ status: 1 }{ status: 1, ord_date: -1 }来排序。

但是,接下来这个查询可以使用到索引交集,因为{ status:1, ord_date: -1 }覆盖了部分的查询条件

 

db.orders.find( { qty: { $gt:10 } , status:"A" } ).sort( { ord_date:-1 } )

 

 

 

分享到:
评论

相关推荐

    mongodb-driver-core-4.2.3-API文档-中文版.zip

    包含翻译后的API文档:mongodb-driver-core-4.2.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.mongodb:mongodb-driver-core:4.2.3; 标签:mongodb、driver、core、中文文档、jar包、java; 使用方法:解压...

    mongodb-driver-sync-4.2.3-API文档-中英对照版.zip

    包含翻译后的API文档:mongodb-driver-sync-4.2.3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.mongodb:mongodb-driver-sync:4.2.3; 标签:mongodb、driver、sync、中英对照文档、jar包、java; ...

    MongoDB Community(mongodb-org-server-5.0.8-1.el7.x86_64.rpm)

    MongoDB Community Server(mongodb-org-server-5.0.8-1.el7.x86_64.rpm)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。...

    mongodb-linux-aarch64-ubuntu1804-4.2.5.tgz

    1. **下载安装包**:访问MongoDB官网或通过wget命令从官方镜像站点下载`mongodb-linux-aarch64-ubuntu1804-4.2.5.tgz`到你的服务器。 2. **解压文件**:使用tar命令解压下载的tgz文件: ``` tar -zxvf mongodb-...

    spring-data-mongodb-3.1.8.jar中文-英文对照文档.zip

    ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ...

    mongodb-driver-sync-4.2.3-API文档-中文版.zip

    包含翻译后的API文档:mongodb-driver-sync-4.2.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.mongodb:mongodb-driver-sync:4.2.3; 标签:mongodb、driver、sync、中文文档、jar包、java; 使用方法:解压...

    mongodb linux 32位安装包 mongodb-linux-i686-3.0.5

    MongoDB 是一个高性能、...由于MongoDB的版本更新较快,不同版本之间可能存在差异,因此在实际操作时,建议参照官方文档或最新的安装指南。同时,确保系统满足MongoDB的硬件和软件需求,例如内存、磁盘空间和依赖库。

    mongodb-windows安装包: mongodb-compass-1.31.2-win32-x64.msi

    mongodb-windows安装包: mongodb-compass-1.31.2-win32-x64.msi 打开直接安装

    mongodb-linux-s390x-rhel72-4.2.0.tgz

    - 解压“mongodb-linux-s390x-rhel72-4.2.0.tgz”后,通常会得到一系列可执行文件和配置文件,需要根据MongoDB官方文档来正确配置环境变量,如`PATH`,并创建数据目录。 - MongoDB的启动和管理可以通过命令行工具...

    mongodb-driver-core-4.2.3-API文档-中英对照版.zip

    包含翻译后的API文档:mongodb-driver-core-4.2.3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.mongodb:mongodb-driver-core:4.2.3; 标签:mongodb、driver、core、中英对照文档、jar包、java; ...

    MongoDB(mongodb-org-server-5.0.4-1.el7.x86_64.rpm)

    MongoDB Community Server(mongodb-org-server-5.0.4-1.el7.x86_64.rpm)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。...

    MongoDB Community(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)

    MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...

    mongodb-windows-64mongodb-windows-64mongodb-windows-64mongodb-wi

    mongodb-windows-64mongodb-windows-64mongodb-windows-64

    mongodb-linux-i686-3.2.20(Linux 32位)

    在"mongodb-linux-i686-3.2.20"这个版本中,我们关注的是针对Linux 32位系统的MongoDB部署。 MongoDB在Linux平台上的安装和配置通常涉及以下步骤: 1. **下载与解压**:首先,你需要下载适合32位Linux系统的...

    mongoDB-CURD操作-----JAVA

    <artifactId>mongodb-driver-sync <version>4.3.0 ``` 创建MongoDB连接: 要连接到MongoDB服务器,我们需要实例化`MongoClient`对象。这通常涉及提供服务器地址、端口以及(如果适用)认证信息: ```java ...

    windows版本 mongodb可视化管理mongodb-compass-1.43.0-win32-x64.exe

    mongodb可视化管理mongodb-compass-1.43.0-win32-x64.exe mongodb compass官网下载地址:https://www.mongodb.com/try/download/compass mongodb相关下载地址: mongodb社区版:...

    mongodb-linux-i686-2.0.4

    在"mongodb-linux-i686-2.0.4"这个压缩包中,我们看到的是MongoDB的一个特定版本,针对Linux平台的i686架构(32位)。2.0.4是MongoDB的一个旧版本,尽管如此,它依然包含了MongoDB的核心特性: 1. 文档型数据模型:...

    mongodb-linux-x86-64-4.0.12.tgz + Mysql-5.5.58.zip 安装包

    mongodb-linux-x86_64-4.0.12.tgz + Mysql-5.5.58.zip 安装包

    mongodb-macos-arm64-7.0.2

    mongodb-macos-arm64-7.0.2

    MongoDB Community(mongodb-linux-aarch64-ubuntu2004-5.0.8.tgz)

    MongoDB Community Server(mongodb-linux-aarch64-ubuntu2004-5.0.8.tgz)适用于Ubuntu 20.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...

Global site tag (gtag.js) - Google Analytics