【MongoDB】索引 - 单字段索引

MongoDB支持在集合文档中的任意字段上创建索引,默认情况下所有的集合都有一个_id字段的索引,用户和应用可以新增索引用于查询和操作。

一、准备工作

这里准备一些学生数据

bash 复制代码
db.students.insertMany([
    { _id: 1,  name: "张三", age: 20, class: { id: 1, name: "1班" }},
    { _id: 2,  name: "李四", age: 22, class: { id: 2, name: "2班" }},
    { _id: 3,  name: "王五", age: 24, class: { id: 3, name: "3班" }},
]);

二、查询索引

bash 复制代码
db.students.getIndexes();

上面我们查询了students集合中的索引列表

查询结果如下:

bash 复制代码
[ { v: 2, key: { _id: 1 }, name: '_id_' } ]

默认情况下,students集合中存在一个_id字段的索引;

三、创建索引

1、创建索引

bash 复制代码
db.students.createIndex({age: 1});

上面创建了age字段的正序索引,其中1代表的是按照age的值正序排序的索引,如果是-1代表的是按照age的值倒序排序的索引

2、查询索引

bash 复制代码
db.students.getIndexes();

结果如下:

bash 复制代码
[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  { v: 2, key: { age: 1 }, name: 'age_1' }
]

可以看到多了一个名称为age_1的索引

3、执行查询

bash 复制代码
db.students.find({
    age: {
        $gt: 21
    }
})

结果如下:

bash 复制代码
[
  { _id: 2, name: '李四', age: 22, class: { id: 2, name: '2班' } },
  { _id: 3, name: '王五', age: 24, class: { id: 3, name: '3班' } }
]

4、查询过程

bash 复制代码
db.students.find({ age: { $gt: 21 } }).explain();

结果如下:

可以看到查询过程中会使用到索引名称为age_1的索引

四、创建内部文档索引

1、创建索引

bash 复制代码
db.students.createIndex({'class.name': -1});

上面创建了class字段下name字段的倒序索引,其中-1代表的是按照class字段下name字段的值倒序排序的索引,如果是1代表的是按照class字段下name字段的值正序排序的索引

注意:由于是内部文档,字段的引用中间需要使用符号(.)进行分割,索引key值两侧我们需要加上单引号

2、查询索引

bash 复制代码
db.students.getIndexes();

结果如下:

bash 复制代码
[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  { v: 2, key: { age: 1 }, name: 'age_1' },
  { v: 2, key: { 'class.name': -1 }, name: 'class.name_-1' }
]

可以看到多了一个名称为class.name_-1的索引

3、执行查询

bash 复制代码
db.students.find({ 'class.name': '1班'})

结果如下:

bash 复制代码
[ { _id: 1, name: '张三', age: 20, class: { id: 1, name: '1班' } } ]

4、查询过程

bash 复制代码
db.students.find({ 'class.name': '1班'}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为class.name_-1的索引

相关推荐
lang2015092823 分钟前
MySQL 8.0原子性DDL全面解析
数据库·mysql
java_logo31 分钟前
Docker 部署 MinIO 全指南
运维·windows·mongodb·docker·容器
viperrrrrrrrrr71 小时前
milvus向量数据库
数据库·大模型·llm·milvus
白衣鸽子1 小时前
MySql数据库同步技术:构建高可用架构的基石
数据库·后端
不良人天码星2 小时前
redis的事务,以及watch的原理
数据库·redis·缓存
韩立学长2 小时前
基于微信小程序的公益捐赠安全平台9hp4t247 包含完整开发套件(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·微信小程序·小程序
智能化咨询2 小时前
SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
数据库·oracle
doris82042 小时前
使用Yum安装Redis
数据库·redis·缓存
有一个好名字2 小时前
万字 Apache ShardingSphere 完全指南:从分库分表到分布式数据库生态
数据库·分布式·apache
Boilermaker19922 小时前
【Redis】哨兵与对脑裂的情况分析
数据库·redis·缓存