mongodb maxDistance属性没有查询正确的半径

时间:2015-09-12 06:18:35

标签: mongodb mongodb-query geospatial

已插入数据库

  

db.users.insert({ “如first_name”: “亚历克斯”, “温度”: “ossington-邓达斯”, “LOC”:{ “LAT”:43.64911870668915, “LON”: - 79.42063808441162}})   db.users.insert({ “如first_name”: “石楠”, “温度”: “奥里利亚”, “LOC”:{ “LAT”:44.610634506093, “LON”: - 79.44514274597168}})   db.users.insert({“first_name”:“lindsay”,“temp”:“404-davis dr。”,“loc”:{“lat”:44.06834703351985,“lon”: - 79.4205093383789}})   db.users.insert({ “如first_name”: “蛱蝶”, “温度”: “巴瑟斯特-劳伦斯”, “LOC”:{ “LAT”:43.71925681186761, “LON”: - 79.42960739135742}})   db.users.insert({ “如first_name”: “沙龙”, “温度”: “央登打士”, “LOC”:{ “LAT”:43.65477003252322, “LON”: - 79.388108253479}})   db.users.insert({ “如first_name”: “约翰”, “温度”: “央登打士”, “LOC”:{ “LAT”:43.65477003252322, “LON”: - 79.388108253479}})

索引数据库:

  

db.users.ensureIndex({LOC: “2D”})

从数据库查询:

  

db.users2.find({“loc”:{$ near:[43.65477003252322,-79.388108253479]}})。pretty()

结果:成功!

问题:$ maxdistance

现在,我想在这些查询上设置最大距离为10英里(最好是公里)。所以查询应该如下所示:

  

db.users.find({“loc”:{$ near:[43.65477003252322,-79.388108253479],$ maxDistance:10/3959}});

但是maxdistance无法正常工作。什么似乎是问题?还有一些我应该使用的更有效的东西吗?喜欢$ centerSphere谢谢!

1 个答案:

答案 0 :(得分:1)

您正在划分为弧度,这是来自传统坐标对的返回测量值不正确。转换时的除数应为3963.2英里或6378.1英里。如果您刚开始将数据作为GeoJSON插入,那么测量总是以米为单位返回。

但是你的主要问题是你的坐标是错误的方式"。订单是"经度"那么"纬度",所以你需要:

{ "$near": [ -79.388108253479, 43.65477003252322 ], "$maxDistance": 10/3963.2 }

再说一遍,如果你首先使用了GeoJSON,那么你就不会有这样的混乱,因为订单被强迫"不像你使用" lat"和" lon"传统配对中的关键。

更不用说测量"地球仪上的距离了#34;对于地球,那么你应该使用$nearSphere来正确补偿。