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

时间:2010-12-31 07:53:58

标签: mongodb indexing database

在文档中,它表示默认情况下,Mongo将其视为lat / long:

  

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

所以,让我说我的文件中有这个:

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

我确保我的索引:

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

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

  • 向我提供距离某个纬度/长度不超过5英里的所有文件
  • 在400米范围内给我所有文件

1 个答案:

答案 0 :(得分:6)

$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英里)。