zoukankan      html  css  js  c++  java
  • 索引属性 name指定

    创建索引时的格式:
    db.collection.ensureIndex({param},{param})
    其中,第一个是索引的值,之前一直只用到了第一个,第二个参数便是索引的属性
    比较重要的属性有:
    名字
      db.collection.ensureIndex({},{name:''})
      在创建索引时,mongodb会自己给索引创建默认的名字,这种名字并不好记,我们看一下mongodb是怎么给自己命名的
    唯一性
    稀疏性
    是否定时删除:比如过期索引
    > db.suoyin.getIndexes()
    [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1
            },
            "name" : "x_1",
            "ns" : "test.suoyin"
        }
    ]
    我们再增加一条索引y,排序方式为-1
    > db.suoyin.getIndexes()
    [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1
            },
            "name" : "x_1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "y" : -1
            },
            "name" : "y_-1",
            "ns" : "test.suoyin"
        }
    ]
    可以看到name的命名方式是key值+下划线+value值
    我们再创建一个复合索引
    > db.suoyin.ensureIndex({x:1,y:-1})
    再看索引
    > db.suoyin.getIndexes()
    [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1
            },
            "name" : "x_1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "y" : -1
            },
            "name" : "y_-1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1,
                "y" : -1
            },
            "name" : "x_1_y_-1",
            "ns" : "test.suoyin"
        }
    ]
    可以看到,复合索引是多个key之前用下划线相隔,这种名字显得并不是很直观,如果再设置索引({x:1,y:1,z:1,m:1}),这样索引名字会特别长,不好记,另外一方面,mongodb对索引对名字有长度限制,现在对长度限制是125字节,为了避免长度超限,也避免获取索引时不能够很好的理解,所以我们可以自定义索引的名字
    > db.suoyin.ensureIndex({x:1,y:1,z:1,m:1},{name:'normal_index'})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 4,
        "numIndexesAfter" : 5,
        "ok" : 1
    }
    再次查看索引
    > db.suoyin.getIndexes()
    [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1
            },
            "name" : "x_1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "y" : -1
            },
            "name" : "y_-1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1,
                "y" : -1
            },
            "name" : "x_1_y_-1",
            "ns" : "test.suoyin"
        },
        {
            "v" : 2,
            "key" : {
                "x" : 1,
                "y" : 1,
                "z" : 1,
                "m" : 1
            },
            "name" : "normal_index",
            "ns" : "test.suoyin"
        }
    ]
    可以看到最后一个名字已经指定为normal_index,这不仅让人容易理解,而且在删除索引时,也可以使用名字作为参数
    > db.suoyin.dropIndex('normal_index')
    { "nIndexesWas" : 5, "ok" : 1 }
    相比较指定x_1_y_-1_z_1,使用名字来代替是比较方便的一种方法
    > db.suoyin.getIndexes()
    [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "test.suoyin"
        }
    ]
  • 相关阅读:
    JS 知识点补充
    JS 数据之间类型的转化
    JS 数据的类型
    数据结构--数组、单链表和双链表介绍 以及 双向链表
    数据结构--队列
    数据结构--栈
    24. 两两交换链表中的节点
    23. 合并K个排序链表
    22. 括号生成
    21. 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/wzndkj/p/9434518.html
Copyright © 2011-2022 走看看