如何在 Mongo 中运行地理空间查询?

Posted

技术标签:

【中文标题】如何在 Mongo 中运行地理空间查询?【英文标题】:How do I run a geospatial query in Mongo? 【发布时间】:2011-06-01 22:01:21 【问题描述】:

在文档中,它说默认情况下,Mongo 将其视为纬度/经度:

默认情况下,索引假定您是 索引纬度/经度并且是 因此配置为 [-180..180] 值范围。

所以,假设我的文档中有这个:

post['loc'] = [ -40.234, 56.222]
db.mycollection.save(post)

我确保我的索引:

db.mycollection.ensureIndex("loc":"2d")

现在,我如何在 Mongo 中执行以下操作?

给我某个纬度/经度 5 英里范围内的所有文件 给我某个纬度/经度 400 米范围内的所有文件

【问题讨论】:

【参考方案1】:

$near$maxDistance结合使用:

db.mycollection.find(loc: $near: [50, 50], $maxDistance: 5)

$maxDistance 的单位与loc 字段相同,即度。如果我没记错的话,赤道的一个度数大约是 69 英里或 111 公里(但在其他纬度则更少,确切的距离很难计算)。

要获取有关返回位置的更多信息,您可以使用geoNear 命令,它会告诉您所有返回集合的距离等。见http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

我想你也可以使用$geoWithin来解决你的问题:

db.mycollection.find(loc: $geoWithin: $center: [[50, 50], 5/3959])

这应该找到以 (50, 50) 为中心、半径为 5/3959 度(即 5 英里)的圆内的所有位置。

【讨论】:

以上是关于如何在 Mongo 中运行地理空间查询?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中是不是有类似反向地理空间查询的东西?

如何使用 NoSQL 大规模运行地理空间查询?

如何在 2.1 MongoDB C# 驱动程序中使用地理空间查询?

如何在 MongoDB Java 中编写地理空间查询

地理空间索引的划分查询

PostgreSQL 是不是实现地理空间关系查询?