在MongoDB中查找最接近坐标的entires

时间:2016-06-30 01:03:09

标签: javascript node.js mongodb

我很难找到最接近一组纬度/经度的物品。

我的对象的lat / lon存储如下:

 "address": "some_address",
    "city": "some_city",
    "coordinates": [
      32.214048,
      -84.361727
    ]

这是我目前使用的查询,当我使用它时,我没有得到任何结果,甚至没有空数组。

collection.find({coordinates: {$near: [40.296898, -111.694647] }, $maxDistance:100})

如何查询我的对象以找到最接近的对象?

1 个答案:

答案 0 :(得分:6)

你必须做三件事。

  1. 您必须以[经度,纬度]顺序保存坐标。正如您在docs中看到的那样,mongo需要这样做。因此,您的数据必须类似于

    {     "地址":" some_address",     " city":" some_city",     "坐标":[       -84.361727,       32.214048     ] }

  2. 正确设置数据后,您必须创建 2dsphere 索引才能使用geoNear。

    db.collection.createIndex({coordinates:" 2dsphere"})

  3. 然后您必须修复您的查询。这里需要传递一个带有几何属性的$ nearSphere,这是你按照我们之前所说的顺序放置坐标[经度,纬度]

    db.collection.find({     坐标:{         $ nearSphere:{             $ geometry:{                 输入:" Point",                 坐标:[ - 84.361727,32.214048]             },             $ maxDistance:100         }     } })

相关问题