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; ...
随机推荐
- 面型对象和UML类图
面向对象 why? 1.程序执行:顺序,判断,循环,----结构化 2.面向对象----数据结构化 3.面向计算机,结构化的才是最简单的 4.变成应该 简单&抽象 一个基本的类 class P ...
- 微信小程序组件构建UI界面小练手 —— 表单登录注册微信小程序
通过微信小程序中丰富的表单组件来完成登录界面.手机快速注册界面.企业用户注册界面的微信小程序设计. 将会用到view视图容器组件.button按钮组件.image图片组件.input输入框组件.che ...
- mybatis 测试输出SQL语句到控制台配置
1: mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- Angular文件基本结构
main.ts(应用程序主入口) → app.module.ts app.module.ts //这个根模块会告诉Angular如何组装该应用 //引入模块 import { BrowserModul ...
- PHP-CMS代码审计(4)
这次找了个发卡平台,url: https://files.cnblogs.com/files/b1gstar/kamiphp.zip 从52破解上下载的 : 先把网站搭建起来. 网站没有采用mvc框 ...
- sql查询 ——排序
-- 排序 -- order by 排序 默认为升序 -- asc 升序 -- desc 降序 -- 查询身高 分别用升序和降序 select *from student order by high ...
- 流程图GGEditor 之 自定义节点相关属性
自定义节点 注册 -- registerNode 我们通过以下接口往 G6 全局注册节点: // 注册节点 G6.registerNode(name, { // 绘制 draw(item) { r ...
- 学习R语言的一点小心得
1.目前R 语言处于入门阶段吧,能够执行一些简单的模型了,还是有收获的. 但是在跑模型的时候经常遇到各种各样的错误,最常见的错误就是数据带入模型之后,数据的类型不对,因此模型跑不下去,因此说,利用he ...
- TChart-图表编辑器的测试
最近不知怎么的,想研究一下图表.先上效果图: 功能代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Class ...
- 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型
// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...