mongodb如何按距离过滤

时间:2016-04-15 19:34:09

标签: mongodb gis

我们说我有这样的用户集合:

{
  "lastName": "Doe",
  "firstName": "John",
   ...
  "location": {
    "country": "USA",
    "city": "New York",
     ...
    "lat": 123456,
    "lon": 123456
  }
}

我希望按距离过滤我的收藏:Return all users near 100 km。 文件$near中有。但无法找到如何使用它。

我有一个这样的例子:

db.users.find({
    location: {
        $near: [-73.9667, 40.78],
        $maxDistance: 100000
    }
});

所以我认为我的问题是如何告诉mongo他必须检查user.location.latuser.location.lon来计算距离。

1 个答案:

答案 0 :(得分:1)

使用您的数据集,您不能。

问题是您没有地理索引。你需要一个人进行地理搜索。

为了能够达到您想要的效果,您需要重新构建数据集,如下所示:

{
  "lastName": "Doe",
  "firstName": "John",
   ...
  "location": {
    "country": "USA",
    "city": "New York",
     ...
    "coords": [123456, 123456]
  }
}

coords数组为[latitude, longitude]。然后,您需要在该字段上创建一个2d索引。