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

6
在文档中,它说Mongo默认将其视为经纬度:
默认情况下,索引假定您正在索引纬度/经度,并且因此配置为[-180..180]值范围。
所以,假设我在我的文档中有这个:
post['loc'] = [ -40.234, 56.222]
db.mycollection.save(post)

我确保我的索引:
db.mycollection.ensureIndex({"loc":"2d"})

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

  • 给我所有距离某个经纬度5英里以内的文档
  • 给我所有距离某个经纬度400米以内的文档
1个回答

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英里)的圆内的所有位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接