如何在 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 中运行地理空间查询?的主要内容,如果未能解决你的问题,请参考以下文章