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中的索引

 

posted on   太白金星有点烦  阅读(456)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示