Mongo 3.0,地理空间数据和计算距离

时间:2015-04-05 16:57:13

标签: mongodb geospatial

目前我花了一个小时试图弄清楚我的查询有什么问题。

使用Mongo 3.0版我有两点我检查的不超过17000米。不幸的是,当我试图从距离高达18000米的距离获取数据时,我什么都没得到。

我尝试了“2dsphere”和/或“2d”索引:

db.location.ensureIndex( { position : "2dsphere" } )

db.location.ensureIndex( { position : "2d" } )

然后我一起工作:

    db.location.find( {
   position: { $near: [ 40.705395, -73.891104 ],  $maxDistance: 18000 }
} )

db.location.find( {
   position:  
   {
      $near : {
        $geometry : { 
          type : "Point" , 
          coordinates : [ 40.705395, -73.891104 ]  
        }, 
        $maxDistance : 18000
      }
    }
    })

和:

db.location.find(    { location : { $near : [ 40.705395, -73.891104 ], $maxDistance: 18000 } } )

我有:

Error: error: {
    "$err" : "Unable to execute query: error processing query: ns=distance.location limit=0 skip=0\nTree: GEONEAR  field=location maxdist=18000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
    "code" : 17007
}

示例文件:

> db.location.find()
{ "_id" : ObjectId("5504ba8a97b3b27d56dc4045"), "id" : 123, "position" : [ 40.705562, -73.898818 ] }

坦率地说,我无法找到问题所在。由数据库进行的计算似乎是错误的,但我宁愿说我犯了某种错误。

你有没有遇到过simillar病例?

1 个答案:

答案 0 :(得分:2)

您需要在集合中创建2DSphere index才能执行地理空间查询。

db.location.ensureIndex({position:"2dsphere"});

另外,我注意到您将坐标存储为[40.705562,-73.898818]。在MongoDB中,坐标轴顺序是[经度,纬度],根据该坐标,您的坐标位于南极洲的某个位置。您需要存储坐标,如[-73.898818,40.705562](除非您确实存储了来自南极洲的位置)。