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里面可以轻松实现过期索引.但这个时间往往不怎么准确. 范例:设置过期索引(实现过期索引 ...
随机推荐
- [LeetCode] 721. Accounts Merge_Medium tag: DFS recursive
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...
- Django实现cookie&session以及认证系统
COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内 ...
- unity3d-Visual Studio Tools for Unity快捷键
1.首先 当安装for unity 后,打开vs2013(我使用的是vs2013),右键可以看到for unity 提供了两个快捷键 2.其次 (Ctrl+Shift+M) 3.最后(Ctrl+Shi ...
- ambari集成impala
1.查看hdp版本,可在ambari-agent节点上查看 VERSION=`hdp-select status hadoop-client | sed 's/hadoop-client - \([0 ...
- 倒计时60s
- testng使用DataProvider+Excel实现DDT
DDT,即数据驱动测试 Data Driver Test,我曾经记录了一篇关于python的DDT框架(Excel+DDT数据驱动实例),那么java中的DDT是怎么样的呢?在java中,可以用tes ...
- linux常用命令:killall 命令
killall命令用进程的名字来杀死进程. 1.命令格式: killall [ -egiqvw ] [ -signal ] [进程名称] 格式:killall -<signame> ...
- org.apache.catalina.core.StandardWrapperValve invoke的解决办法
org.apache.catalina.core.StandardWrapperValve invoke的解决办法 比较容易错的地方是页面带参数进行跳转,由于跳转之后的页面本身也要执行一部分sql语句 ...
- fastDFS errcode:9 path:Bad file descriptor errcode:22 path:Invalid argument
fastDFS errcode:9 path:Bad file descriptor errcode:22 path:Invalid argument <error>status:4 er ...
- 有趣的js匿名函数写法(function嵌套)
例子没有什么实际意义,只能做为思路参考 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...