地址位置索引:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点
子分类:
、2d索引:平面地理位置索引,用于存储和查找平面上的点。
、2dsphere索引:球面地理位置索引,用于存储和查找球面上的点。
查找方式:
、查找距离某个点一定距离内的点。
、查找包含在某区域内的点。
  比如当前打车软件比较火,当确定某个乘客的点的时候,服务器需要确定某个范围内的出租车,接收乘客的搭车请求,这个时候就可以使用mongodb的地理位置索引去完成这样的需求
  比如在使用团购网站时,距离我们最近的餐馆,也可以使用mongodb的地理位置索引去完成。

mongodb的地理位置索引十分强大,可以节省其他数据库所要花费的大量时间来完成应用。

2d索引
创建方式:
db.collection.ensureIndex({w:'2d'})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-,] 纬度[- ]
> db.location.ensureIndex({'w':'2d'})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : ,
"numIndexesAfter" : ,
"ok" :
}
插入几条数据
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
我们看到经度超过180会报错,纬度超过90,但没报错,对这种点在查询中会有不可预知的错误,所以不应该插入这种点
> db.location.find()
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b703772ff7510af7fc788"), "w" : [ , ] }
所以插入这些点
2d索引的查询方式有两种
、$near查询:查询距离某个点最近的点。
、$geoWithin查询:查询某个形状内的点。
> db.location.find({w:{$near:[,]}})
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b703772ff7510af7fc788"), "w" : [ , ] }
我们看到所有点都返回了,原因是near会返回一百个最近的点
我们可以使用maxDistance来限制最远的点
> db.location.find({w:{$near:[,],$maxDistance:}})
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
我们看到只返回了3个点,这种简单的,这里不支持minDistance
$geoWithin查询
形状的表示
、$box:矩形,使用
  {$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示
  都是坐标,第一个坐标表示矩形的左边界,第二个坐标表示矩形的右边界
、$center:圆形,使用
  {$center:[[<x1>,<y1>],r]}
  第一个表示圆心位置,第二个代表半径
、$polygon:多边形,使用
  {$polygon:[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]}表示
  每个数组代表一个坐标点,这些点代表一个多边形

最新文章

  1. 戏说HTML5
  2. JavaScript语言精粹(读书笔记)
  3. MongoDB的安装 转
  4. Java学习-032-JavaWeb_001 -- Tomcat环境部署及基本配置
  5. IOS之表视图添加索引
  6. 在MAC下调试运行暗黑全世界客户端及部分代码注解(基于Firefly)
  7. SGU 280.Trade centers(贪心)
  8. word每次打开都要选择文档类型
  9. 一款C++写的tcp性能测试(压力测试)工具
  10. Android远程桌面助手之功能简介
  11. Zookeeper中Session Timeout的那些事
  12. PAT B1033 旧键盘打字 (20 分)
  13. win10企业版永久激活2017怎么用
  14. G1收集器
  15. pytest文档17-fixture之autouse=True
  16. GPU/CUDA程序初体验 向量加法
  17. jsp页面的el表达式取数据
  18. Python爬虫进阶三之Scrapy框架安装配置
  19. PHP——转义字符
  20. System.Security.Cryptography.CryptographicException 微信支付中公众号发红包时候碰到的错误。

热门文章

  1. Unity Shader着色器优化
  2. X-Content-Type-Options和 X-XSS-Protection
  3. Spark Context 概述
  4. python 数组学习
  5. k8s缩放应用程序
  6. BZOJ 4892 [Tjoi2017]dna 哈希+二分
  7. Hive MetaStore Upgrade
  8. TcxGrid Column动态添加Image
  9. Sqoop环境安装
  10. 用 Java 实现断点续传参考 (HTTP)