13.Mongodb之创建索引(删除索引)02
1.前言
在Mongodb集合中插入文档记录时,如果没有指定_id字段的值,则会默认生成一个ObjectId类型的值并赋值给_id字段,同时也会默认在_id字段上创建一个具有唯一的主键索引。
2.语法
db.collection.createIndex(keys,options)
- keys指定需要创建索引的字段,可以是一个或多个字段,其值的样式为{"字段名":"索引类型"}。索引类型可以为1或者-1,当为1时表示创建一个升序排列的索引(索引叶子节点上链表的排序方向),当为-1时表示创建一个降序排序的索引。索引的类型还可以为text(文本索引)、geospatial(地理位置索引)、hashed(Hash索引)等。
- options为可选字段,如通过name指定索引的名称(替代默认的命令规则)、unique指定索引的唯一性(创建唯一索引)、expireAfterSeconds指定索引的TTL的值(控制一条文当记录在集合中的保存时间,这对不需要长时间保留的日志等数据库非常有用)。
2.1.单字段索引
> db.student.find() { "_id" : 1, "name" : "z1", "age" : 10 } { "_id" : 2, "name" : "l1", "age" : 11 }
这时在name字段上创建一个索引
> db.student.createIndex({'name':1}) //使用createIndex进行创建 { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } >
查看索引创建的信息
> db.student.getIndexes() //查看这个集合中索引信息 [ { "v" : 2, // 索引的版本号 "key" : { "_id" : 1 // 表示索引在_id字段上 }, "name" : "_id_" // 表示这个索引名是_id_ }, { "v" : 2, "key" : { "name" : 1 // 表示在name字段上有索引 }, "name" : "name_1" // 表示索引名是name_1 } ]
2.2.多字段的复合索引
> db.student.createIndex({"name":1,"age":1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 } >
这里可以用db.student.getIndexes()查看索引情况
{ "v" : 2, "key" : { "name" : 1, //这里可以看到有两个字段组成了一个复合索引 "age" : 1 }, "name" : "name_1_age_1" //该索引名为name_1_age_1 } ]
3.索引选择
上面知道了怎样创建单字段索引和复合索引,其中单字段索引最简单,这里就不说了,这里主要说说复合索引。
对于复合索引一般按照:ESR原则进行组合:
精确(Equal) 匹配的字段放最前面
排序(Sort) 条件放中间
范围(Range) 匹配的字段放在最后面
比如如下:
db.members.find({gende:"F",age:{$gte:18}}).sort("join_date":1) //比如要进行一个这样的查询 //这里可以创建一个如下这样的复合索引进行查询 {gender:1,join_data:1,age:1}
4.删除索引
语法:
db.collection.dropIndex(index) //index参数表示字符串类型的索引名称或创建索引时指定文档记录 //删除一个索引 db.collection.dropIndex("索引名") //删除多个索引 db.collection.dropIndexes(["索引名称1","索引名称2","索引名称3"...]) 注意:不能删除主键_id中的索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本