当前位置:网站首页>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
expireAfterSecondsTTL(集合的生存时间,秒为单位)

创建索引的时候,在索引后面设置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
}
原网站

版权声明
本文为[码农研究僧]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_47872288/article/details/126254809