BS的应用在生活中已经非常常见,我们打车,叫外卖,查个地图之类的都会查询附近的相关坐标位置,mongodb提供了原生的二维地图查询,极大地方便了大家的开发。

假定我们有一个定义了位置信息的集合location,给定a,b,c,d节点.

> db.location.find()
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }
{ "_id" : "C", "position" : [ 20, 0 ] }
{ "_id" : "D", "position" : [ 0, 15 ] }

这四个点的位置如图所示:

locationposition字段指定2d索引。

> db.location.ensureIndex( {position: "2d"} )
{"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter" : 2,"ok" : 1
}

我们假定找出坐标点(0,0)附近半径为10的所有坐标点:

> db.location.find( {position: { $near: [0,0], $maxDistance: 10  } } )
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }

其中$near表示中心坐标点,而$maxDistance表示最远的路径10.

再增加一个坐标点E(5,0),然后再次查询

> db.location.insert({_id:"E",position:[5,0]})
> db.location.find( {position: { $near: [0,0], $maxDistance: 10  } } )
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }

由查询可见,mongodb会将数据按照离中心点的距离进行排序,约近的坐标点顺序越靠前。

除此之外,使用$center函数也可以完成同样的动作。

> db.location.find({"position":{$geoWithin:{"$center":[[0,0],10]}}})
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }

mongodb还支持选定空间(box)的查询,查询在某一个矩形范围内的坐标点:

> db.location.find({"position":{$geoWithin:{"$box":[[0,0],[15,15]]}}})
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }
{ "_id" : "D", "position" : [ 0, 15 ] }

mongo在地理查询上还支持多边形($polygon)等操作,丰富的操作极大提升了地理信息系统的开发。结合redis3.2版本可以制作出很丰富的地理信息应用了。

利用MongoDB进行地理坐标查询相关推荐

  1. MongoDB 进阶-关联查询

    [苏州需要工作的加我QQ,内推介绍费平分] MongoDB 进阶 1.数据库命令 a.命令的工作原理 drop命令,在shell中删除一个集合,执行db.refactor.drop().其实这个函数实 ...

  2. mongoDB大数据查询坑

    有一个30亿量级数据的库,如何全量爬取并分析? 因为量级过大无法一次性爬取至本地再分析,考虑使用limit().skip()混合的方法,一次读取1万条数据进行分析存储,30亿数据分成30万份后再合并分 ...

  3. MongoDB之聚合查询

    MongoDB之聚合查询 MongoDB普通查询播客:https://blog.csdn.net/sinat_32366329/article/details/81784562 聚合框架是MongoD ...

  4. 利用SQL索引提高查询速度

    1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构. 索引的使用要恰到好处,其使用原则如下: 在经常进行连接 ...

  5. MongoDB自定义条件查询案例

    MongoDB自定义条件查询案例

  6. MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)

    聚合aggregate 聚合(aggregate) 是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage) 组成的管道,可以对每个阶段的  管道进行分组.过滤等功能,然后经过一系列的处理, ...

  7. 利用存储函数,查询某个员工的年薪

    /* 利用存储函数,查询某个员工的年薪 sal*12+ nvl(comm) */ create or replace function queryEmp(eno in number) return N ...

  8. php mongodb 子查询,MongoDB数组子查询elemMatch

    MongoDB数组子查询elemMatch 在 MongoDB数组子查询elemMatch详解 语法 db_name.collection_name.find({field:{$elemMatch:{ ...

  9. c#sql防注入模糊查询_SQL中利用LIKE实现模糊查询的功能

    大家好,今日继续讲解<VBA数据库解决方案>,今日讲解的内容是:利用ADO,实现模糊查询.在上一讲中,我们实现了利用ADO快速查找的功能,今日我们实现工作表中模糊查找的功能.我们仍是利用上 ...

最新文章

  1. (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
  2. C++包含头文件几种方式
  3. D3DCOLOR与D3DXCOLOR
  4. url的关键字不知道是uft-8还是GBK
  5. 图像处理方面的sci期刊_【IEEE Access 】【一年收录1.5w篇文章的SCI】一个月录用案例...
  6. GitHub 发布中文版帮助文档,这翻译也是醉了~
  7. 比较默认对象和默认约束的异同_UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)...
  8. 2018 蓝桥杯省赛 B 组模拟赛(一)I. 天上的星星(二维前缀和)
  9. golang基本语法——变量使用详解
  10. xcode 重新来过openssl项目历程
  11. xcode6以后, 使用.pch
  12. visio显示形状窗口
  13. 如何从道客巴巴上下载收费文档之我见
  14. 路由器温度测试软件,教你增强小米路由WEB管理(一)——添加CPU温度显示
  15. ORA-00932: 数据类型不一致: 应为 -, 但却获得 BLOB
  16. 华为云教程(云备份CBR)
  17. 第031讲:永久存储,腌制一缸美味的泡菜 | 学习记录(小甲鱼零基础入门学习Python)
  18. DateTime日期差
  19. 小学生计算机认识ppt,小学生认识计算机概要.ppt
  20. 一个操作失误,阿里云大规模故障,引发大量吐槽

热门文章

  1. 互联网思维——跨界思维
  2. 【论文笔记|深读】struc2vec: Learning Node Representations from Structural Identity
  3. 静态qq邮箱 html scc js
  4. 蓝湖导出android代码,【蓝湖指北】用好蓝湖,提升开发效率
  5. APP学习资料地址:
  6. TMS320C5509A 语音编解码(G711编解码器)
  7. 达芬奇项目服务器无法在这台计算机上找到,Vincialign达芬奇隐形矫正软件系统常见问题解答...
  8. 【思维导图】富士相机的胶片模拟详解 史上最全资料汇总
  9. 无人值守-污水处理远程智慧运维系统
  10. 污水处理流程图怎么画