• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 2D索引
    1. 1.1. 添加2d索引
    2. 1.2. 查询方式
    3. 1.3. $geoWithin查询某个形状内的点
  2. 2. 2Dsphere索引
    1. 2.1. 查询

3.2、地理位置索引

2017-12-19 19:11:32
总字数 624
预计阅读时间 2 分钟

概念 : 将一些点的位置存储在MongoDB当中
创建索引后 , 可以按照位置来查找其他点

子分类

  1. 2D索引 , 用于存储和查找平面上的点
  2. 2Dsphere索引 , 用于存储和查找球面上的点

查找方式

  1. 查找距离某个点一定距离内的点
  2. 查找包含在某区域内的点

2D索引

位置使用经纬度两个值构成的数组来表示
取值范围 : 经度 [-180 , 180] , 纬度 [-90 , 90]

添加2d索引
1
db.集合名称.ensureIndex( { 字段名 : "2d" } )

添加该索引之后 , 向该集合当中插入的数据 , 如果该字段不符合经纬度的要求 , 就会报错

查询方式

$near 查询距离某个点距离最近的点 , 并且从近到远排列 , 默认至多返回100条数据

如果一个集合当中已有了如下的数据 , 并且已添加2d索引
location index
执行查询
.find({w:{$near:[50,50]}})
获得的结果如下
location index
如果要查询检索的范围
可以用$maxDistance 和 $minDistance操作符
表示最远距离和最近距离 , 不在这个范围内的点将会被过滤掉
location index

也可以使用db.runCommand方法 , 这个方法可以有更加详细的参数和返回结果
比如 db.runCommand({getNear:”test”,near:[5,5],manDistance:20,num:3}
返回的结果可以获得符合要求的点与指定点的距离 , 以及平均距离等数据

$geoWithin查询某个形状内的点
  1. $box:[ [x1, y1] , [x2 , y2] ] 表示矩形 , 参数分别表示左下坐标和右上坐标
  2. $center :[[x1,y1] , r] 表示圆形 , 参数是圆心和半径
  3. $polygon : [[x1,y1],[x2,y2] ...] 表示多边形 , 参数为多边形每个顶点的坐标

例如 .find({w:{$geoWithin:{$box:[[1,1],[50,50]]}}})
其他两种方式用法同理

2Dsphere索引

球面地理位置索引
创建方式

1
db.集合名称.ensureIndex({w:"2dsphere"}) 

但是在这个索引对应的字段当中
数据就要使用GeoJSON来表示
格式如下

1
{type:"",coordinates:[<coorinates>]} 

关于GeoJSON的详细规范 , 参考下一篇笔记

查询

举例 : 查询一个多边形当中的所有位置

1
2
3
4
5
6
7
8
9
10
{ w:
{ $geoWithin :
{ $geometry :
{
type : "Polygon" ,
coordinates : [[[0,0],[3,6],[6,1],[0,0]]]
}
}
}
}
  • $geoIntersects区域交叉 , 查询与多边形相交的所有的点和形状
  • $near临近 , 与2D索引类似
  • 数据库
  • MongoDB
  • 索引
  • MongoDB

扫一扫,分享到微信

面向对象编程
3.1、全文索引 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆