欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB-索引

程序员文章站 2024-03-16 22:31:10
...

一、索引

1.1、得到集合中的默认索引

(1)命令格式:db.testCollection.getIndexes();

(2)结果:

MongoDB-索引

1.2、创建索引

格式:db.集合名.ensureIndex({“成员名”:boolean,”成员名”:boolean……},{“name”:”index_name”});

说明

①在成员名上创建索引;

②boolean:1升序索引;-1降序索引;

③不写name,则使用默认索引名称:“成员名_boolean”值。

1.2.1、使用默认名称在age成员上创建一个降序索引

(1)命令格式:db.testCollection.ensureIndex({age:-1});

(2)结果:

MongoDB-索引

 (3)我们再看下现在的集合索引(注意索引名字):

MongoDB-索引

1.2.2、在age成员上建立一个升序索引,在score建立一个降序索引,索引名称为name_score

(1)命令格式:db.testCollection.ensureIndex({age:1,score:-1},{name:age_score});

(2)结果:

MongoDB-索引

(3)我们再看下现在的集合索引(注意索引名字):

MongoDB-索引

1.3、删除索引

(1)命令格式:db.testCollection.dropIndex("age_-1");

(2)结果:

MongoDB-索引

1.4、删除全部索引

(1)命令格式:db.testCollection.dropIndexes();

(2)结果(不会删除默认索引):

MongoDB-索引

1.5、唯一索引

(1)需求:在name成员上创建唯一索引。

(2)命令格式:db.testCollection.ensureIndex({“name”:1},{unique:true});

(3)结果:

MongoDB-索引

1.6、过期索引

说明:过期索引的时间不会那么准确,只是大概时间,时间过后保存的数据就会消失。(过期索引字段的值必须是指定的时间类型)

(1)需求:设置一个10秒的过期索引

(2)命令格式:db.testCollection.ensureIndex({time:1},{expireAfterSeconds:10});

(3)测试:往集合中插入一条数据(db.testCollection.insert({“name”:”mongodb”,time:new Date()});),则该数据在大概10秒钟后消失(没有time成员的文档不会消失)

MongoDB-索引

MongoDB-索引

1.7、全文索引

首先必须在相应的成员上建立全文索引,才可以使用$text进行全文检索。

如果要想表示出全文检索,则使用$text判断符;而要想进行数据的查询,则使用$search运算符。对关键字的精确检索

(1)查询指定关键字:{“$search”:”关键字”};

(2)查询多个关键字(或的关系):{“$search”:”关键字1 关键字2 ……”};

(3)查询多个关键字(与的关系):{“$search”:”\”关键1\” \”关键字2\” ……”};

(4)查询多个关键字(排除其中的一个):{“$search”:”关键字1 关键字2 …… -关键字n”};

1.7.1、在集合中的name、sex、course成员上建立全文索引

(1)命令格式:db.testCollection.ensureIndex({name:text,sex:text,course:text});

(2)结果:

MongoDB-索引

1.7.2、查询出选修了语文课的学生

(1)命令格式:db.testCollection.find({$text:{$search:语文}});

(2)结果(这里的$search为精确查询):

MongoDB-索引

1.7.3、查询选修了数学或者英语的学生

(1)命令格式:db.testCollection.find({“$text”:{“$search”:”数学 英语”}});

(2)结果:

MongoDB-索引

1.7.4、查询既选修了语文又选修了化学的学生信息

(1)命令格式:db.testCollection.find({“$text”:{“$search”:”\语文\ \化学\”}});

(2)结果:

MongoDB-索引

1.7.5、查询出选修了语文和化学,但是排除姓名为张三的学生

(1)命令格式:db.testCollection.find({$text:{$search:\语文\ \化学\ -张三}});

(2)结果:

MongoDB-索引

1.7.6、为全文检索操作的匹配度进行打分,分越高则匹配度越高。

(1)需求:为”查询选修了语文和化学”的学生信息打分

(2)命令格式:db.testCollection.find({$text:{$search:\语文\ \化学\””}},{score:{$meta:textScore}});

(3)结果:

MongoDB-索引

1.8、地理信息索引

1.8.1、2D平面索引

$near查询:查询距离某个点最近的坐标点;

1.8.1.1、给shop集合插入几条坐标数据

db.shop.insert({"loc":[10,10]});
db.shop.insert({"loc":[13,15]});
db.shop.insert({"loc":[10,11]});
db.shop.insert({"loc":[17,12]});
db.shop.insert({"loc":[45,29]});

1.8.1.2、为shop集合建立2D索引

(1)命令格式:db.shop.ensureIndex({loc:2d});

(2)结果:

MongoDB-索引

1.8.1.3、查询出离[11, 11]比较近的点

(1)命令格式:db.shop.find({loc:{$near:[11,11]}});

(2)结果:

MongoDB-索引

1.8.1.4、查询出离[11,11]比较近的2个点

(1)命令格式:db.shop.find({loc:{$near:[11,11],$maxDistance:2}});

(2)结果:

MongoDB-索引

1.9、2DSphere球面索引

$geoWithin查询:查询某个形状内的点。

(1) 矩形范围($box):{"$box":[[x1,y1],[x2,y2]]};

(2) 圆形范围($center):{"$center":[[x1,y1],r]};

(3) 多边形($polygon):{"$polygon":[[x1,y1],[x2,y2],……]}

1.9.1、查询矩形

(1)命令格式:db.shop.find({"loc":{"$geoWithin":{"$box":[[9,9],[11,11]]}}});

(2)结果:

MongoDB-索引

1.9.2、 查询圆形

(1)命令格式:db.shop.find({"loc":{"$geoWithin":{"$center":[[9,9],2]}}});

(2)结果:

MongoDB-索引

相关标签: MongoDB索引