当前位置: 首页 > news >正文

【MongoDB】索引 - 单字段索引

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

一、准备工作

这里准备一些学生数据

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班" }},
]);

二、查询索引

db.students.getIndexes();

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

查询结果如下:

[ { v: 2, key: { _id: 1 }, name: '_id_' } ]

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

三、创建索引

1、创建索引

db.students.createIndex({age: 1});

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

2、查询索引

db.students.getIndexes();

结果如下:

[{ v: 2, key: { _id: 1 }, name: '_id_' },{ v: 2, key: { age: 1 }, name: 'age_1' }
]

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

3、执行查询

db.students.find({age: {$gt: 21}
})

结果如下:

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

4、查询过程

db.students.find({ age: { $gt: 21 } }).explain();

结果如下:

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

四、创建内部文档索引

1、创建索引

db.students.createIndex({'class.name': -1});

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

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

2、查询索引

db.students.getIndexes();

结果如下:

[{ 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、执行查询

db.students.find({ 'class.name': '1班'})

结果如下:

[ { _id: 1, name: '张三', age: 20, class: { id: 1, name: '1班' } } ]

4、查询过程

db.students.find({ 'class.name': '1班'}).explain();

结果如下:

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

相关文章:

  • 记一次经典SQL双写绕过题目[极客大挑战 2019]BabySQL 1
  • 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python 计算机竞赛
  • react 实现chatGPT的打印机效果 兼容富文本,附git地址
  • 【系统架构设计】计算机公共基础知识: 6 知识产权与标准化
  • Android ViewGroup 浅析一
  • Redis7--基础篇2(Redis的十大数据类型及常用命令)
  • freertos任务参数
  • 【计算机组成】实模式/保护模式下地址分段(基段地址+偏移地址)的原因
  • 找到【SVM】中最优的惩罚项系数C
  • Python中CAN通讯学习
  • Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)
  • QT学习之QT概述
  • -Xms8g -Xmx8g -Xmn3g 生产事故-记一次特殊的OOM排查
  • 深入理解 Django 模板系统
  • asp.net生产线远程故障诊断系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • [数据结构]链表的实现在PHP中
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6语法详解(一)
  • Facebook AccountKit 接入的坑点
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JAVA并发编程--1.基础概念
  • Java多线程(4):使用线程池执行定时任务
  • node学习系列之简单文件上传
  • pdf文件如何在线转换为jpg图片
  • python_bomb----数据类型总结
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 不上全站https的网站你们就等着被恶心死吧
  • 大整数乘法-表格法
  • 第2章 网络文档
  • 基于Android乐音识别(2)
  • 开发基于以太坊智能合约的DApp
  • 前言-如何学习区块链
  • 王永庆:技术创新改变教育未来
  • 一些css基础学习笔记
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云重庆大学大数据训练营落地分享
  • ​【已解决】npm install​卡主不动的情况
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​什么是bug?bug的源头在哪里?
  • #Linux(帮助手册)
  • #NOIP 2014# day.2 T2 寻找道路
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)http协议
  • (转载)Google Chrome调试JS
  • (转载)OpenStack Hacker养成指南
  • (转载)深入super,看Python如何解决钻石继承难题
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 表达式计算:Expression Evaluator
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)