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

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

db.location.find()
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] }
{ "_id" : "C", "position" : [ , ] }
{ "_id" : "D", "position" : [ , ] }

这四个点的位置如图所示:  为location的position字段指定2d索引。

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

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

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

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

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

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

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

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

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

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

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

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

利用MongoDB进行地理坐标查询的更多相关文章

  1. 如何利用MongoDB实现高性能,高可用的双活应用架构?

    投资界有一句至理名言——“不要把鸡蛋放在同一个篮子里”.说的是投资需要分解风险,以免孤注一掷失败之后造成巨大的损失. 转发来自 如何利用MongoDB实现高性能,高可用的双活应用架构?http://d ...

  2. mongodb的高级查询

    db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,passwor ...

  3. MongoDB 覆盖索引查询

    MongoDB 覆盖索引查询 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, Mo ...

  4. MongoDB 入门之查询(find)

    MongoDB 入门之查询(find) 1. find 简介 (1)find的第一个参数决定了要返回哪些文档. 空的查询文档会匹配集合的全部内容.默认就是{}.结果将批量返回集合c中的所有文档. db ...

  5. 利用Bootstrap框架制作查询页面的界面

    UI设计实战篇——利用Bootstrap框架制作查询页面的界面   Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太 ...

  6. MongoDB数据库中查询数据(下)

    MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...

  7. 在MongoDB数据库中查询数据(上)

    在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...

  8. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  9. 【第十二章】 springboot + mongodb(复杂查询)

    简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...

随机推荐

  1. leetcode--js--Median of Two Sorted Arrays

     问题描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of ...

  2. mysql删除索引

    删除索引 删除索引可以使用ALTER TABLE或DROP INDEX语句来实现.DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下: drop index index_ ...

  3. linux中shell内置命令和外置命令

    shell内置命令 无法通过which或者whereis去查找命令的位置 例如cd,cp这些命令是shell解释器内置的命令 当shell内置命令传入shell解释器,shell解释器通过内核获取相关 ...

  4. Python 获取本地主机信息

    import wmi c = wmi.WMI() for sys in c.Win32_OperatingSystem(): #系统信息 print(sys.Caption) #系统版本号 print ...

  5. python3-cookbook笔记:第七章 函数

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  6. Linux.CentOS下载

    1.[CentOS]centos7 稳定使用版本,centos镜像的下载 - Angel挤一挤 - 博客园.html(https://www.cnblogs.com/sxdcgaq8080/p/106 ...

  7. PHP0018:PHP 图像处理

  8. LNMP+HTTPS

    title: "Lnmp + Https" date: 2019-08-28T16:18:20+08:00 draft: true --- 注:我的linux的ip地址为192.1 ...

  9. QPixmap和QImage

    1.QPixmap QPixmap的设计本来就是用来加速显示,用paint绘图时用QPixmap会比其他类的效果好很多.一般小图片用QPixmap. 2.QImage 依赖软件,直接像素访问,适合大图 ...

  10. 【pattern】设计模式(2) - 模版方法模式

    前言 一晃一年又过了,还是一样的渣. 一晃2周又过去了,还是没有坚持写博客. 本来前2天说填一下SQL注入攻击的坑,结果看下去发现还是ojdbc.jar中的代码,看不懂啊.这坑暂时填不动,强迫在元旦最 ...