MongoDB-索引
一、索引
1.1、得到集合中的默认索引
(1)命令格式:db.testCollection.getIndexes();
(2)结果:
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)结果:
(3)我们再看下现在的集合索引(注意索引名字):
1.2.2、在age成员上建立一个升序索引,在score建立一个降序索引,索引名称为name_score
(1)命令格式:db.testCollection.ensureIndex({“age”:1,”score”:-1},{“name”:”age_score”});
(2)结果:
(3)我们再看下现在的集合索引(注意索引名字):
1.3、删除索引
(1)命令格式:db.testCollection.dropIndex("age_-1");
(2)结果:
1.4、删除全部索引
(1)命令格式:db.testCollection.dropIndexes();
(2)结果(不会删除默认索引):
1.5、唯一索引
(1)需求:在name成员上创建唯一索引。
(2)命令格式:db.testCollection.ensureIndex({“name”:1},{“unique”:true});
(3)结果:
1.6、过期索引
说明:过期索引的时间不会那么准确,只是大概时间,时间过后保存的数据就会消失。(过期索引字段的值必须是指定的时间类型)
(1)需求:设置一个10秒的过期索引
(2)命令格式:db.testCollection.ensureIndex({“time”:1},{expireAfterSeconds:10});
(3)测试:往集合中插入一条数据(db.testCollection.insert({“name”:”mongodb”,”time”:new Date()});),则该数据在大概10秒钟后消失(没有time成员的文档不会消失)
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)结果:
1.7.2、查询出选修了语文课的学生
(1)命令格式:db.testCollection.find({“$text”:{“$search”:”语文”}});
(2)结果(这里的$search为精确查询):
1.7.3、查询选修了数学或者英语的学生
(1)命令格式:db.testCollection.find({“$text”:{“$search”:”数学 英语”}});
(2)结果:
1.7.4、查询既选修了语文又选修了化学的学生信息
(1)命令格式:db.testCollection.find({“$text”:{“$search”:”\”语文\” \”化学\””}});
(2)结果:
1.7.5、查询出选修了语文和化学,但是排除姓名为张三的学生
(1)命令格式:db.testCollection.find({“$text”:{“$search”:”\”语文\” \”化学\” -张三”}});
(2)结果:
1.7.6、为全文检索操作的匹配度进行打分,分越高则匹配度越高。
(1)需求:为”查询选修了语文和化学”的学生信息打分
(2)命令格式:db.testCollection.find({“$text”:{“$search”:”\”语文\” \”化学\””}},{“score”:{“$meta”:”textScore”}});
(3)结果:
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)结果:
1.8.1.3、查询出离[11, 11]比较近的点
(1)命令格式:db.shop.find({“loc”:{“$near”:[11,11]}});
(2)结果:
1.8.1.4、查询出离[11,11]比较近的2个点
(1)命令格式:db.shop.find({“loc”:{“$near”:[11,11],”$maxDistance”:2}});
(2)结果:
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)结果:
1.9.2、 查询圆形
(1)命令格式:db.shop.find({"loc":{"$geoWithin":{"$center":[[9,9],2]}}});
(2)结果:
上一篇: overload方法重载
下一篇: 控制three.js的渲染帧率