开心档-软件开发入门之MongoDB 覆盖索引查询

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 本章将会讲解MongoDB 覆盖索引查询

 

    • 作者简介:每天分享MongoDB教程的学习经验、和学习笔记。
    • 座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。
    • 个人主页:iOS开发上架的主页

    前言

    本章将会讲解MongoDB 覆盖索引查询

    目录

    MongoDB 覆盖索引查询

    使用覆盖索引查询


    官方的MongoDB的文档中说明,覆盖查询是以下的查询:

      所有的查询字段是索引的一部分

      所有的查询返回字段在同一个索引中

      由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。

      因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。


      使用覆盖索引查询

      为了测试覆盖索引查询,使用以下 users 集合:

      {
         "_id": ObjectId("53402597d852426020000002"),
         "contact": "987654321",
         "dob": "01-01-1991",
         "gender": "M",
         "name": "Tom Benzamin",
         "user_name": "tombenzamin"
      }

      image.gif

      我们在 users 集合中创建联合索引,字段为 gender 和 user_name :

      >db.users.createIndex({gender:1,user_name:1})

      image.gif

      **注:**5.0 之前版本可以使用 db.collection.ensureIndex() ,但 ensureIndex() 在 5.0 版本后已被移除,使用 createIndex() 代替。

      现在,该索引会覆盖以下查询:

      >db.users.find({gender:"M"},{user_name:1,_id:0})

      image.gif

      也就是说,对于上述查询,MongoDB的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。

      由于我们的索引中不包括 _id 字段,_id在查询中会默认返回,我们可以在MongoDB的查询结果集中排除它。

      下面的实例没有排除_id,查询就不会被覆盖:

      >db.users.find({gender:"M"},{user_name:1})

      image.gif

      最后,如果是以下的查询,不能使用覆盖索引查询:

        • 所有索引字段是一个数组 所有索引字段是一个子文档

        上一篇

        MongoDB - 连接

        下一篇

        MongoDB 创建集合

        相关实践学习
        MongoDB数据库入门
        MongoDB数据库入门实验。
        快速掌握 MongoDB 数据库
        本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
        相关文章
        |
        3月前
        |
        存储 NoSQL 关系型数据库
        |
        3月前
        |
        NoSQL 关系型数据库 MySQL
        深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析
        在 MongoDB 中,我们使用 find() 和 find_one() 方法来在集合中查找数据,就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样
        65 1
        |
        16天前
        |
        JSON NoSQL MongoDB
        mongodb导出聚合查询的数据
        mongodb导出聚合查询的数据
        |
        21天前
        |
        NoSQL MongoDB 索引
        【MongoDB】MongoDB 覆盖索引
        【4月更文挑战第3天】【MongoDB】MongoDB 覆盖索引
        |
        3月前
        |
        存储 NoSQL 关系型数据库
        4-MongoDB索引知识
        MongoDB索引知识
        |
        3月前
        |
        NoSQL MongoDB 索引
        【待完善】MongoDB - 使用索引
        【待完善】MongoDB - 使用索引
        30 0
        |
        3月前
        |
        存储 NoSQL MongoDB
        MongoDB之索引和聚合
        【1月更文挑战第21天】 一、索引 1、说明 2、原理 3、相关操作 3.1、创建索引 3.2、查看集合索引 3.3、查看集合索引大小 3.4、删除集合所有索引(不包含_id索引) 3.5、删除集合指定索引 4、复合索引 二、聚合 1、说明 2、使用
        65 0
        |
        3月前
        |
        存储 NoSQL 安全
        go 连接mongodb执行查询的代码
        在Go语言中,你可以使用官方的MongoDB驱动程序 `"go.mongodb.org/mongo-driver/mongo"` 来连接MongoDB并执行查询。以下是一个简单的示例代码,演示如何连接MongoDB并执行查询: 首先,确保你已经安装了MongoDB驱动程序: ```bash go get go.mongodb.org/mongo-driver/mongo ``` 然后,可以使用以下示例代码: ```go package main import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driv
        |
        4月前
        |
        缓存 NoSQL MongoDB
        MongoDB数据库查询性能提高40倍?
        MongoDB数据库查询性能提高40倍?
        96 0
        |
        4月前
        |
        NoSQL JavaScript 前端开发
        MongoDB【CRUD练习-条件查询-文档关系】
        MongoDB【CRUD练习-条件查询-文档关系】