Mongodb的索引--学习笔记(未完)

全文索引

建立方法:
--在articles集合的key字段上创建全文索引
db.articles.ensureIndex({key:"text"})
--在articles集合的key_1,key_2字段上创建全文索引
db.articles.ensuereIndex({key_1:"text",key_2:"text"})
--在articles集合的所有字段上创建全文索引
db.articles.ensuereIndex({"$**":"text"})

--在articles集合中的article字段上创建全文索引
> db.articles.ensureIndex({"article":"text"});
{
        "createdCollectionAutomatically" : true,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}
>
--插入演示数据
db.articles.insert({"article":"aa bb"})
db.articles.insert({"article":"aa bb cc "})
db.articles.insert({"article":"aa bb cc dd"})
db.articles.insert({"article":"aa bb cc rr"})

使用全文索引查询
--查询包含aa 或 bb 或 cc的文档
db.articles.find({$text:{$search:"aa bb cc"}})
--查询包含aa 或 bb 但不包含 cc的文档
db.articles.find({$text:{$search:"aa bb -cc"}})
--查询包含aa 、bb 且包含cc的文档
db.articles.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}})

全文索引的相似度
$meta操作符:{score:{$meta:"textScore"}}
写在查询条件后面可以返回查询结果的相似度
经常与sort一起使用

--查询含有"aa bb"字段的文本,并返回查询结果的相似度
> db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}});
{ "_id" : ObjectId("5798ad223206da9bc38b2370"), "article" : "aa bb cc dd", "score" : 1.25 }
{ "_id" : ObjectId("5798ad293206da9bc38b2371"), "article" : "aa bb cc rr", "score" : 1.25 }
{ "_id" : ObjectId("5798ad1b3206da9bc38b236f"), "article" : "aa bb cc ", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5798ad143206da9bc38b236e"), "article" : "aa bb", "score" : 1.5 }
{ "_id" : ObjectId("5798ae383206da9bc38b2372"), "article" : "aa", "score" : 1.1 }
--根据相似度排序
> db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}});
{ "_id" : ObjectId("5798ad143206da9bc38b236e"), "article" : "aa bb", "score" : 1.5 }
{ "_id" : ObjectId("5798ad1b3206da9bc38b236f"), "article" : "aa bb cc ", "score" : 1.3333333333333333 }
{ "_id" : ObjectId("5798ad223206da9bc38b2370"), "article" : "aa bb cc dd", "score" : 1.25 }
{ "_id" : ObjectId("5798ad293206da9bc38b2371"), "article" : "aa bb cc rr", "score" : 1.25 }
{ "_id" : ObjectId("5798ae383206da9bc38b2372"), "article" : "aa", "score" : 1.1 }
> 

全文索引使用的限制(版本2.6.5)
1.每次查询,只能指定一个$text查询(一个集合只能创建一个全文索引)
2.$text查询不能出现在$nor查询中
3.查询中如果包含$text,hint不在起作用
4.当前Mongodb的全文索引还不支持中文

索引属性

创建索引的格式:
db.collection.ensureIndex({indexValue},{indexProperty})
其中indexProperty比较重要的有:
1.名字,name指定:
  db.collection.ensureIndex({},{name:""})
2.唯一性,unique指定:
  db.collection.ensureIndex({},{unique:true/false})
3.稀疏性,sparse指定
  稀疏性指是否为文档中不存在的字段创建索引
  db.collection.ensureIndex({},{sparse:true/false})
4.是否定时删除,expireAfterSeconds指定:
  TTL 过期索引

地理位置索引

地理位置索引
    将一些点的位置存储到Mongodb中,创建索引后,可以按照位置来
查找其他点

子分类
2d索引:用于存储和查找平面上的点
2dsphere索引:用于存储和查找球面上的点

查找方式
1.查找距离某个点一定距离内的点
2.查找包含在某区域内的点

2d索引详解
1.创建索引方式
  db.collection.ensureIndex({w:"2d"})

2.位置表示方式
  经纬度[经度,纬度]

3.取值范围
  经度[-180,180] 纬度[-90,90]

4.插入位置数据
  >db.location.insert({w:[1,1]})
  >db.location.insert({w:[1,2]})
  >db.location.insert({w:[5,6]})
  >db.location.insert({w:[200,1]}) #Mongodb会直接报错,经度超出范围
  >db.location.insert({w:[180,100]}) #纬度超出范围,Mongodb并没有报错,但是后期查询会出现不可预知的错误。
  >db.location.insert({w:[79,76]})

5.查询方式
    $near查询 查询距离某个点的最近点
    >db.location.find({w:{$near:[1,1]}}) #默认返回100个
    --可通过$maxDistance来限制查找的最远距离
    >db.location.find({w:{$near:[1,1],$maxDistance:10}}) #限制查找最远距离为10

    $geoWithin查询 查询某个形状内的点
    形状有三种表示方式
    1)$box:矩形,使用{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示,内部是两个坐标,第一个代表左边界,第二个代表右边界。
    >db.collection.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}})
    2)$center:圆形,使用{$center:[[<x1>,<y1>],r]}表示,内部是圆心位置和半径。
    >db.collection.find({w:{$geoWithin:{$center:[[0,0],5]}}})
    3)$polygon:多边形,使用{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示,内部是坐标点,坐标点围成一个多边形。
    >db.collection.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}})

  geoNear查询 是对$near查询的补充
  db.runCommand({
         getNear:<collection>,
         near:[x,y],
         minDistance:(对2d索引无效)
         maxDistance:
         num:
     })
时间: 2024-08-05 02:56:12

Mongodb的索引--学习笔记(未完)的相关文章

w3school之JavaScript学习笔记-未完待续

在前端测试过程中,少不了听到开发说到JS,JS在webJavaScript 是浏览器脚本语言(简称JS),主要用来向HTML页面添加交互行为. 学习网址:http://www.w3school.com.cn/js/js_intro.asp 写入HTML输出 document.write("html元素") 对事件作出反应 <button type="button" onclick="alert('Welcome!')">点击这里<

w3cschool之HTML学习笔记-未完待续

由于html标记语言是网页自动化测试所必须要掌握的,所以重新学习html语言(这似乎是我第四次学习html,这次得坚持了) 学习网址:http://www.w3school.com.cn/html/index.asp HTML 指的是超文本标记语言 (Hyper Text Markup Language),用来描述网页的.Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们.浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容. HTML文档是由HTML元素定义的.HTM

Less学习笔记(未完待续)

     作为 CSS 的一种扩展,Less 不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法.这样的设计使得学习 Less 很轻松,而且你可以在任何时候回退到 CSS(摘自官网) 1.变量    Less通过@来定义变量:Less中的变量为完全的常量,所以只能被定义一次 @base: #f938ab; div { background: @base; padding: 50px; } p { color: #ff0; } 2.混合(Mixin) 混合可以将一个定义好的clas

sql语句学习及索引学习,未完待续,补充增删改查

1,查询出last_name 为 'Chen' 的 manager 的信息. select * fromwhere employee_id = ( selectfrom employees where'Chen') 2,查询每个月倒数第2 天入职的员工的信息 select last_name, hire_date where hire_date = last_day(hire_date) – 1 3,查询平均工资高于 8000 的部门 id 和它的平均工资. SELECT department_

BootStap学习笔记(未完待续)

移动设备优先:  为了让开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的head之中添加viewport meat标签:如下: <metaname="viewport"content="width=device-width, initial-scale=1.0"> 响应式图像: 通过对图像添加class="img-responsive"可以让图像对响应式布局设计的更好: 伪元素 http://www.w3school.

Scala学习笔记(未完)

1.for循环格式for(i <- 1 to 10){print(i)} 2.懒加载 lazy val a = 1; 直到用时才会加载 3.方法的声明格式 def(x:Int,y:Int) : Int ={} 最后一个冒号后面是返回类型,不加则没有返回值 4.默认参数 def loadConf(conf : String = "default"){ print(conf)} 如果不传入参数 ,则默认使用default的数值 5.变长参数 def sun(elems: Int*){

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

mongodb之索引学习

学习索引分类和创建索引:                1._id索引 大多数集合默认的索引2.单键索引:手动创建,一个单一的值3.多建索引:组合函数4.复合索引 :最左前缀原则5.过期索引 :一定时间内失效,注意点:必须是isodate或者其数组,不要使用时间戳,否则不会被自动删除.6.全文索引 db.tm.ensureindex({"article":"text"}),db.tm.ensureindex({"key1":"text&