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; ...
随机推荐
- PMP--2. 项目启动前准备工作
####################################################### 概述:在第一章节的1.1-1.7中基本都是介绍的<PMBOK>的理论概念以及 ...
- 区块链 POS和POW的区别
如果你是一名资深的比特币矿工或商人,你一定听说过POW和POS,否则,很难理解. 读完本文,相信会让你明白,原来,虚拟货币除了挖矿,还有利息! 第一段:通俗的概念解析 POW:全称Proof of W ...
- Linux下使用Tomcat
切换到root账户. tomcat依赖jdk,先安装jdk,注意tomcat对jdk的版本有要求,要看一下tomcat.jdk的版本是否对应. 1.下载tomcat7 不使用软件源,自己下载安装,这样 ...
- nodejs编程优化
如何编写优化的 JavaScript 对象属性的顺序:始终以相同的顺序实例化对象属性,以便共享的隐藏类和随后优化的代码可以共享之. 动态属性:在实例化之后向对象添加属性将强制执行隐藏的类更改,并降 ...
- 离线安装PostgreSQL11.6
因为客户最近有一台CentOS7的虚拟机,但是没有联网,需要安装离线安装PostgreSQL 1.首先去官网下载离线安装包 https://www.postgresql.org/download/ 说 ...
- SQL Server无备份误删数据的恢复
在正式生产数据库中,因为客户现场管理不规范产生了一条错误数据,由于自身睡眠不佳加上客户方言表达,将编号记错,在没有备份的情况下,直接连远程数据库执行了delete操作. 由于备份设置的是每日0点,当天 ...
- 纪中5日T1 1564. 旅游
1564. 旅游 题目描述 输入N个数,从中选择一些出来计算出总和,问有多少种选法使得和为质数. 输入 第一行一个整数N. 第二行N个整数,表示这N个数的值. 输出 一个整数,表示方案数. 样例输入 ...
- win10创建本地用户
win+r,输入lusrmgr.msc win+i
- spring的困惑--org.springframework.web.servlet.DispatcherServlet noHandlerFound
出现这种情况可能是代码没有更新到Tomcat服务器上
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hdfs分布式文件系统安装
实验目的 复习安装jdk 学习免密码登录 掌握安装配置hdfs集群的方法 掌握hdfs集群的简单使用和检查其工作状态 实验原理 1.hdfs是什么 hadoop安装的第一部分是安装hdfs,hdfs是 ...