mongodb的复合索引是怎么回事例如db.a.ensureIndex({i:1,j:-1});

mongodb的复合索引是怎么回事例如db.a.ensureIndex({i:1,j:-1});,第1张

复合索引或者是索引的目的是方便后续的查找,在在MongoDB中, 数字1表示i键的索引按升序存储,-1表示j键的索引按照降序方式存储。

> dbtestensureIndex({"i":1,

"j":-1})

该索引被创建后,基于i和j的查询将会用到该索引,或者是基于i的查询也会用到该索引,但是只是基于j的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用。

所以这个索引主要是为了建立一个数据的排放方式方便后续的查找,但是对于一个键的排序只有一个方向,但是不同的键排序方向可以不一样。

1 索引的创建

mongodb采用ensureIndex来创建索引,如:

dbuserensureIndex({"name":1})

表示在user集合的name键创建一个索引,这里的1表示索引创建的方向,可以取值为1和-1

在这里面,我们没有给索引取名字,mongodb会为我们取一个默认的名字,规则为keyname1_dir1_keyname2_dir2keynameN_dirN

keyname表示键名,dir表示索引的方向,例如,上面的例子我们创建的索引名字就是name_1

索引还可以创建在多个键上,也就是联合索引,如:

> dbuserensureIndex({"name":1,"age":1})

这样就创建了name和age的联合索引

除了让mongodb默认索引的名字外,我们还可以去一个方便记的名字,方法就是为ensureIndex指定name的值,如:

> dbuserensureIndex({"name":1},{"name":"IX_name"})

这样,我们创建的索引的名字就叫IX_name了

2 唯一索引

与RDB类似,我们也可以定义唯一索引,方法就是指定unique键位true:

>dbuserensureIndex({"name":1},{"unique":true})

3查看我们建立的索引

索引的信息存在每个数据库的systemindexes集合里面,对这个集合只能有ensureIndex和dropIndexes进行修改,不能手动插入或修改集合。

通过> dbsystemindexesfind()可以找到数据库中多有的索引:

> dbsystemindexesfind()

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testentities", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testblog", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testauthors", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testpapers", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testanalytics", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testuser", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testfood", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testuserinfo", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "testuserinfo", "name" : "_id_" }

{ "v" : 1, "key" : { "name" : 1 }, "ns" : "testuser", "name" : "IX_name" }

4删除索引

如果索引没有用了,可以使用dropIndexes将其删掉:

> dbrunCommand({"dropIndexes":"user","index":"IX_name"})

{ "nIndexesWas" : 2, "ok" : 1 }

ok表示删除成功

MongoDB 增加用户 删除用户 修改用户 读写权限 只读权限,

MongoDB用户权限分配的 *** 作是针对某个库来说的。--这句话很重要。

1、 进入ljc 数据库:

use ljc; ->

1、关于LBS相关项目,一般存储每个地点的经纬度的坐标, 如果要查询附近的场所,则需要建立索引来提升查询效率。

Mongodb专门针对这种查询建立了地理空间索引。

2、集合中索引不能超过64个;索引名的长度不能超过125个字符;一个复合索引最多可以有31个字段。

超过1024bytes大小的键不会受到唯一索引的约束,可以插入多个同样的8KB长的字串,因这些不会被索引。

以上就是关于mongodb的复合索引是怎么回事例如db.a.ensureIndex({i:1,j:-1});全部的内容,包括:mongodb的复合索引是怎么回事例如db.a.ensureIndex({i:1,j:-1});、mongodb新插入数据时需要重新建索引吗、mongodb删除数据库会删除索引吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10180860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存