索引属性 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"
    }
]

 

posted @ 2018-08-07 06:46  wzndkj  阅读(643)  评论(0编辑  收藏  举报