2 MongoDB索引使用
单键索引
这是最常见的索引类型,无论是在MySQL还是MongoDB中 。
// 为collection建立name的升序索引db.users.createIndex( { name: 1 } );// 为collection建立name的降序索引db.users.createIndex( { name: -1 } );
组合索引
这也是一种常见的索引类型,通过建立组合索引可以在保持索引个数的前提下尽可能覆盖更多的查询条件 。
例如,在members集合中,假设我们往往需要通过以下几个条件来组合查询:
db.members.find({ gender: "F", age: {$gte: 18}}).sort("join_date:1");
那么,我们就可以针对gender、age和join_date做一个组合索引:
db.members.createIndex({"gender":1,"join_date":1,"age":1});
和MySQL一样,组合索引具有一个特征:最左匹配原则 。
那么,这就要求我们在创建组合索引时,需要满足ESR原则:
(1)精确(Equal)匹配的字段放在最前面,比如这里的gender字段;
(2)排序(sort)字段放中间,比如这里的join_date字段;
(3)范围(Range)匹配的字段放在最后面,比如这里的age字段;
上面这个ESR原则,同样适用于MySQL 和 ElasticSearch 。
多键索引
MongoDB使用多键索引来索引存储在数组中的内容 。
如果索引字段包含数组值,MongoDB会为数组的每个元素创建单独的索引条目 。这些多键索引允许查询通过匹配数组中的元素来获取包含数组的文档 。
db.classes.insertMany([{"classname":"class1","students":[{name:'jack',age:20},{name:'tom',age:22},{name:'lilei',age:25}]},{"classname":"class2","students":[{name:'lucy',age:20},{name:'jim',age:23},{name:'jarry',age:26}]}])-- 创建多键索引 db.classes.createIndex({"students.age":1})
地理位置索引
物联网场景下的监控数据存储是MongoDB的一大重要应用场景之一,因此也就催生了一种独特的索引类型:地理位置索引 。
-- 创建索引db.geo_col.createIndex( { location: "2d"} ,{ min:-20, max: 20 , bits: 10},{ collation: {locale: "simple"} })-- 查询db.geo_col.find({ location :{ $geoWithin :{ $box : [ [ 1, 1 ] , [ 3, 3 ] ] } } })-- 查询结果{ "_id" : ObjectId("5c7e7a6243513eb45bf06125"), "location" : [ 1, 1 ] }{ "_id" : ObjectId("5c7e7a6643513eb45bf06126"), "location" : [ 1, 2 ] }{ "_id" : ObjectId("5c7e7a6943513eb45bf06127"), "location" : [ 2, 2 ] }{ "_id" : ObjectId("5c7e7a6d43513eb45bf06128"), "location" : [ 2, 1 ] }{ "_id" : ObjectId("5c7e7a7343513eb45bf06129"), "location" : [ 3, 1 ] }{ "_id" : ObjectId("5c7e7a7543513eb45bf0612a"), "location" : [ 3, 2 ] }{ "_id" : ObjectId("5c7e7a7743513eb45bf0612b"), "location" : [ 3, 3 ] }
有关地理索引的更多介绍,请参阅2d Index Internals 。
全文索引
嗯,Luence、ElasticSearch有全文索引,MongoDB也有!
全文检索会对每一个词建立一个索引(也称为 倒排索引),指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式 。
这个过程类似于通过字典中的检索字表查字的过程 。
MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引 。
但是,还没有支持中文!还没有支持中文!还没有支持中文!(重要的事情说三遍)
-- 创建全文索引db.blogArticles.createIndex({"content" : "text"}
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- mongodb是nosql数据库吗 8 NoSQL | MongoDB入门实战教程
- mongodb是nosql数据库吗 11 NoSQL | MongoDB入门实战教程
- mongodb是nosql数据库吗 12 NoSQL | MongoDB入门实战教程
- mongodb是nosql数据库吗 13 NoSQL | MongoDB入门实战教程
- mongodb是nosql数据库吗 14 NoSQL | MongoDB入门实战教程
- 做双眼皮有几种方法
- 最有激情的健身运动是什么
- 终端净水,只为能饮用健康好水
- it翻译 IT是什么意思?
- 阿西吧是什么意思 阿西吧为什么在韩国是骂人话 韩语骂人的话中文读法