【问题标题】:How do I run a geospatial query in Mongo?如何在 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 米范围内的所有文件

【问题讨论】:

    标签: mongodb indexing database


    【解决方案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 英里)的圆内的所有位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2022-08-02
      • 2022-01-17
      • 2015-11-04
      • 2016-05-06
      • 1970-01-01
      • 2019-09-26
      相关资源
      最近更新 更多