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})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/791551.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

概率论期末速成(知识点+例题)

考试范围 一&#xff1a; 事件关系运算性质全概率公式、贝叶斯公式古典概型 二&#xff1a; 离散分布律连续密度函数性质 -> 解决三个问题&#xff08;求待定系数、求概率、求密度函数&#xff09;分布函数 -> 解决三个问题常用分布&#xff08;最后一节课的那几个分…

Linux 调试命令记录

查看CPU信息 cat /proc/cpuinfo 显示当前电源功耗 top 命令能够清晰的展现出系统的状态&#xff0c;而且它是实时的监控&#xff0c;按 q 退出。 uptime 与 w 这两个命令只是单纯的反映出负载&#xff0c;所表示的是过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。…

【机器学习】机器学习详解-小白入门(随记)

&#x1f388;边走、边悟&#x1f388;迟早会好 机器学习&#xff08;Machine Learning&#xff09;是一种人工智能技术&#xff0c;通过让计算机系统从数据中学习并改进其性能&#xff0c;而不是通过显式编程来完成特定任务。其核心概念是利用算法和统计模型对大量数据进行分…

「解析」Cosine-Warmup 学习率策略

参考论文&#xff1a;SGDR: Stochastic Gradient Descent with Warm Restarts Bag of Tricks for Image Classification with Convolutional Neural Networks 梯度下降算法需要我们设置一个值&#xff0c;用来控制权重更新幅度&#xff0c;我们将其称之为学习率。它是控制模型学…

统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份

原文链接&#xff1a;统信UOS删除升级后GRUB中的回滚条目与备份 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份的文章。在进行系统升级后&#xff0c;GRUB引导菜单中可能会出现多个回滚条目和备份…

maven高级1——一个项目拆成多个

把原来一个项目&#xff0c;拆成多个项目。 &#xff01;&#xff01;他们之间&#xff0c;靠接口通信。 以ssm整合好的项目为例&#xff1a; 如何看拆的ok不ok 只要compile通过就ok。 拆分pojo 先新建一个项目模块&#xff0c;再把内容复制进去。 拆分dao 1.和上面一样…

Python爬虫速成之路(1):获取网页源代码

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

暴雨、高温等极端天气频发,农险业务迎大考

近期&#xff0c;湖北地区暴雨如注&#xff0c;持续的强降水使得地势低洼的农田面临严重的渍涝风险&#xff0c;早稻、再生稻等作物或将遭受“雨洗禾花”的威胁。 山东的农田却饱受高温干旱的煎熬&#xff0c;南四湖下级湖水位持续降低&#xff0c;农作物受旱面积不断扩大&…

grep对文件内容搜索(附重要拓展-正则表达式)

文件搜索是搜索查找符合条件的某文件的目录&#xff0c;若要编辑文件或对文件的某配置进行修改&#xff0c;就需要对文件内容进行搜索。 grep 命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具&#xff0c;用于搜索一个或多个文件中匹配给定模式的行。grep 代表“Gl…

请跳至打印机属性的“Adobe PDF设置”页面,取消选择“仅停靠系统字体;不使用文档字体”

场景&#xff1a; 当使用adobe pdf打印时&#xff0c;出现如下提示“请跳至打印机属性的“Adobe PDF设置”页面&#xff0c;取消选择“仅停靠系统字体&#xff1b;不使用文档字体””&#xff0c;该如何解决。 描述 □“仅停靠系统字体&#xff1b;不使用文档字体” 复选本框…

nginx安装配置视频频服务器-windows

编译安装nginx 1、安装perl 安装地址: https://strawberryperl.com&#xff0c;选择msi安装程序即可 2、安装sed for windows 下载地址&#xff1a;https://sourceforge.net/projects/gnuwin32/files/sed/&#xff0c;执行安装程序结束后&#xff0c;将安装包bin目录配置到…

javaweb学习day1《HTML篇》--新浪微博(前端页面的创建思路及其HTML、css代码详解)

一、前言 本篇章为javaweb的开端&#xff0c;也是第一篇综合案例&#xff0c;小编也是看着黑马程序员的视频对里面的知识点进行理解&#xff0c;然后自己找一个新浪微博网页看着做的&#xff0c;主要还是因为懒&#xff0c;不想去领黑马程序员的资料了。 小编任务javaweb和ja…

MybatisPlus 使用教程

MyBatisPlus使用教程 文章目录 MyBatisPlus使用教程1、使用方式1.1 引入依赖1.2 构建mapper接口 2、常用注解2.1 TableName2.2 TableId2.3 TableField MyBatisPlus顾名思义便是对MyBatis的加强版&#xff0c;但两者本身并不冲突(只做增强不做改变)&#xff1a; 引入它并不会对原…

【Python专栏】搭建Pyhthon运行环境及开发环境 | 安装Python | 安装PyCharm

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Python专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍******文件安装包详见文章末尾****** 搭建Pyhthon运行环境及开发环境…

高可用hadoop分布式节点的扩容

解决方案 修改hdfs-site.xml 文件 原xml文件 <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (th…

使用 Python 绘制美国选举分级统计图

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 如何创建美国选举结果的时间序列分级统计图 数据地址为源地址&#xff0c;如果失效请与我联系。 2024 年美国大选将至&#xff0c;…

【高中数学/指数、对数】已知9^m=10,a=10^m-11,b=8^m-9,则ab两数和0的大小关系是?(2022年全国统考高考真题)

【问题】 已知9^m10,a10^m-11,b8^m-9,则&#xff08;&#xff09; A.a>0>b B.a>b>0 C.b>a>0 D.b>0>a 【解答】 首先注意到10^log10_11-110,8^log8_9-90&#xff0c; 问题就转化为log8_9,log9_10,log10_11谁大谁小的问题&#xff0c; 再进一步…

JavaScript中的Symbol类型是什么以及它的作用

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介JavaScript中的Symbol类型是什么以及它的作用1. 符号&#xff08;Symbol&#xff09;的创建2. 符号的特性3. 符号的作用3.1 属性名的唯一性3.2 防止属性被意外访问或修改3.3 使用内置的符号3.4 符号与属性遍历 4. 总结 ⭐ 写在最后…

Oracle执行一条SQL的内部过程

一、SQL语句根据其功能主要可以分为以下几大类&#xff1a; 1. 数据查询语言&#xff08;DQL, Data Query Language&#xff09; 功能&#xff1a;用于从数据库中检索数据&#xff0c;常用于查询表中的记录。基本结构&#xff1a;主要由SELECT子句、FROM子句、WHERE子句等组成…

js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解

文章目录 一、前言二、定位关键参数三、代码实现一、前言 破解:FastMoss数据分析网站Fm-Sign加密字段 二、定位关键参数 先看一下网站加密字段是长什么样,如下图,老手估计一下子就能发现字段Fm-Sign:的密文类似md5加密后的结果。 直接全局搜索Fm-Sign:看来key也没有做混…