MongoDB地理空间(2d)索引创建与查询
LBS(Location Based Services)定位服务,即根据用户位置查询用户附近相关信息,这一功能在很多应用上都有所使用。基于用户位置进行查询时,需要提供用户位置的经纬度。为了提高查询速度,MongoDB为坐标平面查询提供了专门的索引,称作地理空间(2d)索引。
1. 创建地理空间索引
地理空间索引又称为2d索引。创建其它形式的索引,我们会按升序或降序(1或-1)的形式创建索引,不同于其它形式的索引,创建地理空间索引要指定的值为:2d。语法结构如下:
db.<collection>.createIndex({
<location field> : "2d" ,
<additional field> : <value> } ,
{ <index-specification options>})
location field:要创建地理空间索引的字段(键)
additional field:附加字段(键)
index-specification options:索引选项
index-specification options是一个包含以下可选值的子文档:
{ min : <lower bound>, max : <upper bound>, bits : <bit precision> }
min bound:{number},最低范围,默认-180.0
max bound:{number},最高范围,默认180.0
bit precision:{integer},存储数据Geohash值精度,取值:1〜32,默认26
地理空间计算本质上是二维数据计算,创建索引地理空间索引时,索引键的值必须是一对值:一个包含两个数值的数组或包含两个键的内嵌文档(内嵌文档键的名称不重要)。
以下几种健值形式,都可以创建地理空间索引:
// 数组
{"gps": [, ]}
// 包含两个键的内嵌文档
{"gps": { "x":, "y":}}
{"gps": { "latitude":, "longitude":}}
我们可以对上面的"gps"健创建地理空间索引:
db.userlocation.ensureIndex({"gps" : "2d"}, {"min":-, "max":});
这样我们就创建了地理空间索引值范围为-1000〜1000的索引。
2. 使用地理空间索引查询
2.1 $near接近点查询
通过$near关键字,可以根据一个指定的平面点,按距离排序返回查询结果:
db.<collection>.find({
<location field> :{
$near : [ <x>, <y>],
$maxDistance : <distance in meters<,
$mixDistance : <distance in meters<
}
})
$near表示要查询的中心点
$maxDistance距中心点的最大距离
$minDistance距中心点的最小距离
如,查询距离坐标点(40,120),10公里以内的数据:
db.userlocation.find({
gps : {
$near : [, ],
$maxDistance :
}
})
2.2 $geoWithin指定形状查询
MongoDB不仅可以按坐标点查询,还可以在查询指定形状内的文档。按形状查询使用$geoWithin(在v2.4之前使用$within):
db.<collection<.find({
<location field> :{
$geoWithin : { $box|$polygon|$center : <coordinates>}
}
})
在指定形状查询中,$box、$polygon、$center分别表示按矩形、五边形、圆形进行查询。
如,查询坐标点为(40,120),半径为10以内的文档:
db.userlocation.find({
gps : {
$geoWithin : {
$center:[[, ], ]
}
}
})
MongoDB地理空间(2d)索引创建与查询的更多相关文章
- Lucene7.1.0版本的索引创建与查询以及维护,包括新版本的一些新特性探索!
一 吐槽 lucene版本更新实在太快了,往往旧版本都还没学会,新的就出来,而且每个版本改动都特别大,尤其是4.7,6,6,7.1.......ε=(´ο`*)))唉,但不可否认,新版本确实要比旧版本 ...
- mongodb地理空间计算逻辑
"1/地球半径"是怎么得出的 参考文档如下: http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates http:// ...
- MongoDB地理空间数据存储及检索
目录 1.存入地理数据 GeoJSON数据存入 1.Ponit 点数据 2.LineString 线数据(多段线) 3. Polygon 多边形数据 4.MultiPoint多点.MultiLineS ...
- 地理位置索引 2d索引
地址位置索引:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点 子分类: .2d索引:平面地理位置索引,用于存储和查找平面上的点. .2dsphere索引:球面地理位置索引, ...
- 基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询
一.Geomesa - QuickStart(教程工程包) 百度网盘下载地址:geomesa-tutorials-master.7z 二.解压后,IDEA编译如下 百度网盘下载地址:IDEA201 ...
- MongoDB索引创建(5)
索引创建 1:索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引 2. 在mongodb中,索引可以按字段升序/降序来创建,便于排序 3. 默认是用btree来组织索引文件,2. ...
- Windows使用MongoDB,以及索引创建
安装MongoDB https://www.mongodb.com/download-center#community 点击msi安装程序进行安装,可以进行自定义安装,选择安装位置,我选择的是D盘 在 ...
- MongoDB 索引 explain 分析查询速度
一.索引基础索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快.MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧.下面是创建索引 ...
- MySQL高级查询之索引创建、删除、增加、修改、慢sql、explain解释sql
day04数据库 昨日知识点回顾 1.单表操作 1.单表的操作 条件查询的优先级别: where > group by >having > order by > limit; ...
随机推荐
- linux中vim使用技巧
一.导入文件内容 :r 解释 导入文件 示例 编辑模式下 # 将/tmp/test.txt内容导入到光标所在的位置的下一行 :r /tmp/test.txt :! 解释 在编辑文件时,执行系统命令 示 ...
- POJ 1753 Flip Game 暴力 深搜
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 59468 Accepted: 24750 Descr ...
- clr via c# 运行时序列化
1,快速了解序列化----windows IO 系统,FileStream,BinaryFormatter,SoapFormatter--不支持泛型. public class SerializeRe ...
- 利用Graphics的截图功能CopyFromScreen
该方式是直接对屏幕进行截图操作 UserControl chartContainPanel = new UserControl(); Graphics graph = chartContainPane ...
- 显示层封装及实现与优化(无动画+css3动画+js动画)
showhide.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 5.Android-电话拨号器详解
之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序. 实现的步骤如下所示: 1.创建项目 2.写layout/activity_main.xml ...
- 【公告】Hello World!
Hi! 这里 是 华中师大一附中 2019 级信息组 官方博客 ! ^_^ 我们将在这里分享一些难题的做法,帮助大家共同学习. 也欢迎同是OIer的你加入我们哦!
- Linux发行版Ubuntu下的Python开发环境的配置
linux下的Python安装, 首先我们需要使用都Shell一系列的命令(前面的linux基础可不是白学的哦!) 1.更新软件安装源地址 sudo apt-get update apt-get,是一 ...
- 特殊符号unicode编码
包括箭头类.基本形状类.货币类.数学类.音乐符号类.对错类.星星类.星座类.国际象棋类.扑克牌类.希腊字母.十字类.法律符号.标点符号,详情见以下网址:http://caibaojian.com/un ...
- Java源码系列2——HashMap
HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...