当前位置:网站首页>MongoDB 对索引的创建查询修改删除 附代码
MongoDB 对索引的创建查询修改删除 附代码
2022-08-11 08:52:00 【码农研究僧】
前言
mongo数据库类似mysql,关于mysql的补充可看我之前的文章:
对于索引,如果查询的时候没有增加索引,读取数据的时候会通过扫描集合中的所有数据,对应的数据量进行查询会效率特别低,如果增加了索引(类似mysql通过最左前缀以及索引顺序),查询起来会相对查询整个文件要快得多
1. 函数
对于mongo的索引有增删改查
2. 创建索引
创建索引一般通过db.collection.createIndex(参数)
(这个为3.0以上使用),如果3.0以下使用,将其createIndex替换为ensureIndex即可
对于带什么参数可看以下内容:
参数 | 描述 |
---|---|
v | 索引版本号(不设置默认mongo版本号,也可都设置某个数好区分) |
name | 索引名(string类),无配置通过索引字段名生成(索引顺序) |
unique | 唯一索引(设置为true),默认为false |
weights | 该索引相对其他索引权重【1-99999】 |
sparse | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
background | 建立该索引过程是否会阻塞其他数据库操作,设置为true(不会阻塞),默认为false |
expireAfterSeconds | TTL(集合的生存时间,秒为单位) |
创建索引的时候,在索引后面设置value:1 为升序,-1为降序
对于索引可以分为:
唯一索引(索引具备唯一性,保证数据不会重复出现)
普通索引
复合索引(多个字段的匹配查询)
- 增加唯一索引:
db.sdk_log.createIndex({"id":1},{"unique" : true})
- 增加普通索引:
db.sdk_log.createIndex({"id":1})
- 增加复合索引:
db.sdk_log.createIndex({"id":1,"name":1},{background:true})
成功显示之后会有(类似如下内容,关键字段已使用xxx替代):
{
"raw" : {
"xxx" : {
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 4,
"numIndexesAfter" : 5,
"ok" : 1,
"$gleStats" : {
"lastOpTime" : {
"ts" : xx,
"t" : xx
},
"electionId" : ObjectId("xx")
}
}
},
"ok" : 1
}
通过对应的explain可看到查询过程,具体如下:db.audio_sdk_log.find({"id":10001}).explain()
3. 查询索引
查询索引可以通过查询key、详细信息、具体的size
参数 | 描述 |
---|---|
db.collection.getIndexes() | 查询该集合的所有索引 |
db.collection.getIndexKeys() | 查询集合中的所有索引键 |
db.collection.totalIndexSize() | 查询集合索引总大小 |
db.collection.getIndexSpecs() | 查询集中各索引详细信息,这个查出来跟db.collection.getIndexes()差不多 |
实战中的显示具体如下,通过db.collection.totalIndexSize(
)查询结果如下:
唯一索引只有一个,查询显示的时候会把所有索引都显示出来
通过db.collection.getIndexes()
以及db.collection.getIndexSpecs()
大致信息如下:
[
{
"v" : 1,
"key" : {
"id" : 1
},
"name" : "id_",
"ns" : "xxxx.audio_sdk_log"
},
{
"v" : 1,
"unique" : true,
"key" : {
"id" : 1,
"name" : 1
},
"name" : "id_1_name_1",
"ns" : "xxxx.audio_sdk_log"
},
....
]
通过db.collection.getIndexKeys()
查询结果如下:
[
{
"id" : 1
},
....
]
4. 修改索引
修改索引类似重建索引,原本通过创建id为正序的索引:db.collection.createIndex({“id”:1})
将其修改为倒序索引:db.collection.reIndex({"id":-1})
5. 删除索引
索引的删除根据 【创建索引的name(如果不配置系统会给你设置)】进行删除
使用的代码具体如下:
参数 | 描述 |
---|---|
db.collection.dropIndex(“索引name”) | 删除该集合的特定索引 |
db.collection.dropIndex() | 删除该集合内所有索引 |
删除特定的索引,执行成功会返回ok为1的字段(类似如下内容,关键字段已使用xxx替代):
{
"raw" : {
"xxxx" : {
"nIndexesWas" : 9,
"ok" : 1
}
},
"ok" : 1
}
边栏推荐
- 安装ES7.x集群
- mysql数据查询因为查询的时间跨度过大导致cup爆满应该怎么办
- 对比学习系列(三)-----SimCLR
- 借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05
- 研发了 5 年的时序数据库,到底要解决什么问题?
- Kotlin算法入门求自由落体
- Detailed Explanation of the Level 5 Test Center of the Chinese Institute of Electronics (1)-string type string
- 数据库无法启动,报无法分配内存,怎么处理
- 框架外的PHP读取.env文件(php5.6、7.3可用版)
- Typescript基本类型---上篇
猜你喜欢
nodejs worker_threads的事件监听问题
STM32之串口传输结构体
笔试题大疆08.07
ASP.NET Core 6框架揭秘实例演示[32]:错误页面的集中呈现方式
轻量级网络(一):MobileNet V1,V2, V3系列
如何通过 IDEA 数据库管理工具连接 TDengine?
Typescript基本类型---上篇
[C语言] sscanf如何实现sscanf_s?
Nuget can't find the package problem
go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
随机推荐
中国电子学会五级考点详解(一)-string类型字符串
分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
flex布局回顾
通过Xshell连接Vagrant创建的虚拟机
基于consul的注册发现的微服务架构迁移到servicemesh
IDEA的初步使用
小程序组件不能修改ui组件样式
Openlayers 聚合图、权重聚合图以及聚合图点击事件
2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹
Essential C# scripting skills for Unity developers
法律顾问成了律所鸡肋产品了吗?
无代码平台助力中山医院搭建“智慧化管理体系”,实现智慧医疗
机器学习(一)数据的预处理
DataGrip配置OceanBase
基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示
Break pad source code compilation--refer to the summary of the big blogger
【wxGlade学习】wxGlade环境配置
excel将数据按某一列值分组并绘制分组折线图
JUC Concurrent Programming
麒麟V10系统打包Qt免安装包程序