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

TIM*_*MEX 6 database indexing mongodb

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

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

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

post['loc'] = [ -40.234, 56.222]
db.mycollection.save(post)
Run Code Online (Sandbox Code Playgroud)

我确保我的索引:

db.mycollection.ensureIndex({"loc":"2d"})
Run Code Online (Sandbox Code Playgroud)

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

  • 给我所有距离特定纬度/长度5英里范围内的文件
  • 给我一个纬度/长度400米范围内的所有文件

The*_*heo 6

使用$near与一起选择$maxDistance:

db.mycollection.find({loc: {$near: [50, 50], $maxDistance: 5}})
Run Code Online (Sandbox Code Playgroud)

单位$maxDistanceloc场相同,即度.如果我没记错的话,在赤道大约69英里或111公里(但在其他纬度较小,确切的距离很难计算).

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

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

db.mycollection.find({loc: {$geoWithin: {$center: [[50, 50], 5/3959]}}})
Run Code Online (Sandbox Code Playgroud)

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