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:
})
Mongodb的索引--学习笔记(未完)的更多相关文章
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- linux学习笔记---未完待续,缓慢更新
做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...
- jQuery 学习笔记(未完待续)
一.jQuery概述 宗旨: Write Less, Do More. 基础知识: 1.符号$代替document.getElementById()函数 2.使 ...
- oracle-绑定变量学习笔记(未完待续)
--定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...
- sql语句学习及索引学习,未完待续,补充增删改查
1,查询出last_name 为 'Chen' 的 manager 的信息. select * fromwhere employee_id = ( selectfrom employees wher ...
- Scrapy 爬虫框架学习笔记(未完,持续更新)
Scrapy 爬虫框架 Scrapy 是一个用 Python 写的 Crawler Framework .它使用 Twisted 这个异步网络库来处理网络通信. Scrapy 框架的主要架构 根据它官 ...
- Java学习笔记(未完待续)
变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...
- Greys学习笔记(未完待续)
Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...
- mongodb常用命令学习笔记
mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...
随机推荐
- 在linux中安装和卸载mysql
[安装] 已经获取到linux版本的mysql安装包,包括mysql的server(服务端)和client(客户端)的安装包,假设安装包为: MySQL-server-5.0.22-0.i386.rp ...
- Java注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...
- 一步一步学习Unity3d学习笔记系1.4单服模式架构
单服模式更适合做手游,只有一个服务器,在程序中通过代码模块来实现各功能,而不是物理模块划分. 登录模块实现,账号数据处理, 用户模块,处理角色权限处理, 匹配模块,匹配战斗 好友模块,负责好友管理 战 ...
- 互联网行业都缺前端工程师-最高offer薪水38k*16
摘要:现在,几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,对上市公司乃至巨头这个问题也一样存在.没错,优秀的前端工程师简直比大熊猫还稀少. 现在,几乎整个互联网行业都缺前端工程师,不仅在刚 ...
- HTTP 500.22 错误解决
打开网站对应的应用池-->高级设置-->托管管道模式改为classic
- 洛谷P2725 邮票 Stamps
P2725 邮票 Stamps 37通过 224提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 为什么RE?在codevs上AC的. 题目背景 给一组 ...
- Linux系统(X64)安装Oracle11g完整安装图文教程另附基本操作
一:查看本地ssh服务 Linux系统下安装启动ssh服务,下面以CentOS版本Linux系统为例: 1.检查是否装了SSH包 rpm -qa |grep ssh 2.没有安装SSH直接YUM安装 ...
- qq 登录 cordova插件
1.下载open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下这个链接 很容易的把环境配置好http://wiki.connect.qq.com/%E5% ...
- tool debug Android phonegap app
phonegap debug 最近发现了一个可以调试phonegap的工具 在Google浏览器上调试Android真机的APP 这是好啊!!!跟Mac上的Safari 浏览器一样调试iOS 的A ...
- ionic ngcordova map 地圖
幾乎每個APP都會有地圖 所以在這裏記錄一下 1.在index.html 中 <script src="https://maps.googleapis.com/maps/api/js? ...