• 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中的索引
  • 相关阅读:
    二叉树--转换二叉树(leetcode 108,leetcode 109)
    二叉树--层序遍历(leetcode 102
    二叉树--对称二叉树(leetcode 101
    数据库事务隔离
    二叉树--后序遍历的递归和非递归(leetcode 145
    二叉树--中序遍历的递归和非递归(leetcode 94
    二叉树--先序遍历的递归和非递归(leetcode 144
    链表--排序链表(leetcode 148
    接口的调用
    查锁表以及杀进程
  • 原文地址:https://www.cnblogs.com/zmc60/p/16271890.html
Copyright © 2020-2023  润新知