Mongodb单字段索引详解

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第89篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

当用户或应用频繁的针对集合中某个字段查询时,用户可以在频繁查询的字段上添加索引来提高效率。例如,公司的HR部门,经常使用员工的id查询员工信息。开发人员或者数据管理人员就可以在id字段添加索引来提高查询效率。这种针对单个字段建立的索引,就是单字段索引。

本文整理Mongodb的官方文档,为您详细介绍单字段索引。

概述

单字段索引,是使用集合中文档的一个字段来建立的索引。mongodb默认为_id字段建立了索引。用户可以按照实际业务需求,添加建立新的单字段索引来提高查询效率。

mongodb支持在文档中的任何一个字段建立单字段索引,包括文档的顶级字段,针对嵌入式文档建立索引或者针对嵌入式文档的某个字段建立索引。当用户对嵌入式文档字段建立索引时,用户查询条件当中用来过滤的文档,需要与集合索引中的文档严格相等时,才能使用索引。包括在查询条件中输入文档的字段顺序。当用户对嵌入式文档进行修改,包括对该文档增加或删除字段,都可能导致索引无法使用。因此在针对嵌入文档字段建立索引时,是否真正的需要针对整个文档建立索引,还是使用嵌入文档中的部分字段建立索引就可以了。

当用户建立索引时,需要指定该索引的字段和字段值在索引中的排序。其中使用数字1表示按照字段值的正序排列。而指定-1时,表示使用索引值的倒序排列。

语法

用户按照下面的语法来创建单字段索引

db.<collection>.createIndex( {<field>: <sortOrder>})

其中,<field>为嵌入式文档中的字段时,需要使用点操作符。如“embedded.field1”.

下图表示了使用单字段建立索引。

在集合collection中使用score字段上建立的索引。score是一个数字类型的字段。索引使用score字段的数值建立。从最小值min到最大值max排列。其中还包括18, 30, 45, 75这几个数字。{score:1}表示按照字段score从小到大的顺序排列建立索引。

应用

创建students集合并插入数据。

db.students.insertMany([{
    name: "Alice",
    gpa:  3.6,
    location: { city: "Sacramento", state: "California" }
}, {
    name: "Bob",
    gpa:  3.9,
    location: { city: "San Francisco", state: "California"}
}])

在顶级字段添加索引

在gpa字段创建索引

db.students.createIndex({gpa: 1})

使用gpa字段建立索引后,会改善在gpa字段的查询效率。如

db.students.find({gpa: {$gt: 3.7}})
db.students.find({gpa: 3.6})

在嵌入文档字段添加索引

mongodb支持在嵌入文档字段添加索引。在嵌入文档字段添加索引,需要使用点操作符。如下面的语句,在文档location的字段state上添加了单字段索引。

db.students.createIndex({"location.state": 1})

当用户频繁的查询location.state字段时,就会用到这个索引

db.students.find( { "location.state": "California" } )

db.students.find( { 
    "location.city": "Albany", 
    "location.state": "New York" 
} )

为嵌入文档字段添加索引

如为集合students中字段location添加索引

db.students.createIndex({location: 1})

相关推荐

  1. MongoDB索引索引的顺序

    2024-07-11 09:42:04       45 阅读
  2. MongoDB 索引

    2024-07-11 09:42:04       29 阅读
  3. MongoDB-索引-部分索引

    2024-07-11 09:42:04       38 阅读
  4. MongoDB】--MongoDB的组合索引

    2024-07-11 09:42:04       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 09:42:04       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 09:42:04       56 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 09:42:04       46 阅读
  4. Python语言-面向对象

    2024-07-11 09:42:04       57 阅读

热门阅读

  1. PDF文件在线处理工具(侧重数理及论文)

    2024-07-11 09:42:04       16 阅读
  2. 20.js获取页面卷去的距离以及滚到到指定位置

    2024-07-11 09:42:04       21 阅读
  3. 【人脸识别、Python实现】PyQt5人脸识别管理系统

    2024-07-11 09:42:04       19 阅读
  4. Flutter EasyRefresh:介绍与使用指南

    2024-07-11 09:42:04       21 阅读
  5. Perl编译器架构:前端与后端的精细分工

    2024-07-11 09:42:04       21 阅读
  6. Golang 高频面试题 && 答案

    2024-07-11 09:42:04       23 阅读
  7. Spring Boot常用注解类

    2024-07-11 09:42:04       21 阅读
  8. Perl伪哈希探秘:深入理解Perl中的高级数据结构

    2024-07-11 09:42:04       20 阅读
  9. Python:引号应用、字符串应用

    2024-07-11 09:42:04       22 阅读
  10. Hadoop之HDFS重点架构原理简介

    2024-07-11 09:42:04       20 阅读
  11. Spark SQL----ALTER DATABASE

    2024-07-11 09:42:04       18 阅读
  12. SpringBoot3+Redis实现分布式锁

    2024-07-11 09:42:04       17 阅读