当前位置:网站首页>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
}
边栏推荐
猜你喜欢
随机推荐
Initial use of IDEA
专题讲座8 字符串(一) 学习心得
oracle使用online_catalog收集数据,想看下online_catalog模式修改表字
第一次因没有找到iframe元素而怀疑selenium4是不是有bug?
Kotlin算法入门计算素数以及优化
dsu on tree(树上启发式合并)学习笔记
基于consul的注册发现的微服务架构迁移到servicemesh
Lightweight network (1): MobileNet V1, V2, V3 series
笔试题大疆08.07
Essential C# scripting skills for Unity developers
LoRa芯片的特征
Nuget can't find the package problem
eureka和consul的区别
RestTemplate工具类
四级独创的阅读词汇表
小目标检测3_注意力机制_Self-Attention
谁能解答?从mysql的binlog读取数据到kafka,但是数据类型有Insert,updata,
法律顾问成了律所鸡肋产品了吗?
kali渗透测试环境搭建
Getting Started with Kotlin Algorithms Calculating Prime Numbers and Optimization