MongoDB(课时25 地理信息索引)
3.6.4 地理信息索引
地理信息索引分为两类:2D平面索引,2DSphere球面索引。在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标。
范例:定义一个shop的集合
db.shop.insert({loc : [10, 10]}) # loc表示坐标
db.shop.insert({loc : [11, 10]})
db.shop.insert({loc : [10, 11]})
db.shop.insert({loc : [12, 15]})
db.shop.insert({loc : [16, 17]})
db.shop.insert({loc : [90, 90]})
db.shop.insert({loc : [150, 160]})

范例:为shop的集合定义2D索引
db.shop.ensureIndex({"loc" : "2d"}) # 2d不能写成2D
(automatically 机械的,自动的)
这个时候shop集合就可以实现坐标位置的查询了,而要进行查询有两种查询方式:
- "$near"查询:查询距离某个点最近的坐标点
- "$geoWithin"查询:查询某个形状内的点
范例:查询坐标是:[11, 11]附近的点
db.shop.find({loc : {"$near" : [11, 11]}})

执行上面代码会将数据集合里面的前100 个点的信息都返回。
现在设置范围——两点距离最大为5:
范例:设置范围
db.shop.find({loc : {"$near" : [11, 11], "$maxDistance" : 5}}) # "$maxDistance"最大距离是5(此处为欧式距离)

注意一点,在2D索引里面支持最大距离,但是不支持最小距离。
但可以使用"$geoWithin"设置一个查询范围,设置范围如下:
矩形范围($box):{"$box" : [[x1, y1], [x2, y2]]}
圆形范围($center):{"$center" : [[x1, y1], r]}
多边形($polygon):{"$polygon" : [[x1, y1], [x2, y2], [x3, y3],...]} # polygon多边形
范例:查询矩形
db.shop.find({loc : {"$geoWithin" : {"$box" : [[9, 9], [11, 11]]}}})

范例:查询圆形
db.shop.find({loc : {"$geoWithin" : {"$center" : [[10, 10], 2]}}})

在MongoDB里面,除了一些支持操作函数之外,还有一个重要的命令:runCommand(),这个函数可以执行所有的特定的MongoDB命令。
范例:利用runCommand()实现信息查询
db.runCommand({"geoNear" : "shop", near : [10, 10], "$maxDistance" : 5, num : 2})
db.runCommand({"geoNear" : "shop", near : [10, 10], maxDistance : 5, num : 2})

results中有两个结果,即返回两条数据;
"nscanned":33,表示扫描了33条数据;
"avgDistance":0.5,表示扫描平均距离0.5;
"maxDistance":1,表示最大距离1;
"time":11,表示扫描用时11毫秒。
runCommand命令是MongoDB中最为基础的命令。
MongoDB(课时25 地理信息索引)的更多相关文章
- mongoDB常见的查询索引(三)
1. _id索引 _id索引是绝大多数集合默认建立的索引 对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- 第30章:MongoDB-索引--地理信息索引
①地理信息索引 地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引.在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标. 范例:定义一个商铺的集合 db.sho ...
- MongoDB 常见的查询索引
常见的查询索引 _id索引 _id 索引是绝大多数集合默认建立的索引.对于每一个插入的数据.MongoDB 会自己主动生成一条唯一的 _id 字段. 1 2 3 4 5 6 7 8 9 ...
- 【mongoDB中级篇②】索引与expain
索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...
- MongoDB系列四(索引).
一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...
- MongoDB优化,建立索引实例及索引机制原理讲解
MongoDB优化,建立索引实例及索引机制原理讲解 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样 ...
- Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计
特殊索引和集合 1. 固定集合:固定集合需要事先创建好看,而且它的大小是固定的.当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除. 2. 创建固定集合:db.createC ...
- mongodb学习笔记之索引(转)
一.索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令: > db.test.ensureIndex({" ...
- MongoDB(课时22 过期索引)
3.6.2 过期索引 在一些程序的站点会出现若干秒之后信息被删除的情况,例如:手机信息验证码,那么在MongoDB里面可以轻松实现过期索引.但这个时间往往不怎么准确. 范例:设置过期索引(实现过期索引 ...
随机推荐
- owl.carousel
简介 Owl Carousel 是一个强大.实用但小巧的 jQuery 幻灯片插件,它具有一下特点: 兼容所有浏览器 支持响应式 支持 CSS3 过度 支持触摸事件 支持 JSON 及自定义 JSON ...
- Impala shell详解
不多说,直接上干货! 查看帮助文档 impala-shell -h 刷新整个云数据 impala-shell -ruse impala;show tables; 去格式化,查询大数据量时可以提高性能 ...
- RPC和RabbitMQ
在单台机器或者单个进程中,如果要调用某个函数,只需要通过函数指针,传入相关参数,即可调用成功并获得结果.但如果是在分布式系统中,某个进程想要调用远程机器上的其它进程提供的方法(服务),就需要采用RPC ...
- tortoisegit 代码的回滚方式 --两种
TortoiseGit有两种回滚代码方式, 一种是导出指定版本代码为zip格式,不影响源代码:另一种是直接在源代码上回滚, 指定版本之后写的代码都会被删除.下面分别介绍这两种方法: 首先进入版本日志对 ...
- 让nodepad++编辑时链接能双击打开
让nodepad++编辑时链接能双击打开,Notepad++自动把代码或编辑状态里的链接或URL地址转成可点击的链接,当你双击该URL会打开相应的网页地址,不用复制地址到浏览器打开了,非常方便好用. ...
- Django框架----render函数和redirect函数的区别
render函数和redirect函数的区别: render:只会返回页面内容,但是未发送第二次请求 redirect:发挥了第二次请求,url更新 具体实例说明 render: redirect:
- cursor图标自定义
cursor: url(./images/favicon.ico), auto; 首先auto必须加上,其次必须使用ico文件,目前来说ico文件没有兼容性问题,ico格式怎么转? 传送门:http: ...
- cache与buffer
Cache 缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的 ...
- centos下nginx安装与配置
nginx依赖以下模块: l gzip模块需要 zlib 库 l rewrite模块需要 pcre 库 l ssl 功能需要openssl库 tar xzvf nginx-1.9.15.tar. ...
- Django 编写自定义的 404 / 500 报错界面
Django 编写自定义的 404 / 500 报错界面 1. 首先 setting.py 文件中的 debug 参数设置成 false ,不启用调试. DEBUG = False 2. 在 temp ...