2015-12-02 38 views
3

我的文档结构是这样的:

{ agency_key : '', 
    route_id: '', 
    direction_id: '', 
    stops: [ 
      {stop_id:15, 
      stop_lat: '', 
      stop_lon: '', 
      loc: [-83.118972, 42, 121567] 
      }, 
      {... 
      } 
      ] 
} 

我想找到这从集合中的每个文件接近给定的(纬度,经度)对一个给定的距离内停止。我创建了2d索引。我尝试了$放松,然后$ geoNear,但它说$ geoNear只能在管道的第一阶段。 我尝试这样做:

db.tm_stops.aggregate([ 
... { 
... $geoNear: { near: {coordinates: [-82.958841, 42.370114] },  distanceField: "stops.calculated", query: { agency_key: "DDOT"}, 
... includeLocs: "stops.loc" } 
... } 
... ]) 

我试过如下:

db.tm_stops.find({stops:{$near:[-82.958841, 42.370114], $maxDistance: 1 } }) 

它抛出这个错误:

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

应该是什么我蒙戈查询?我需要从Node.js应用程序执行此操作,但我希望首先在Mongo shell中看到一些结果。提前致谢。

回答

2

我终于使查询工作。我正在回答我自己的问题以供将来参考。 由于我使用2d索引而不是2dsphere,因此我不必在近操作符中使用coordinates。此查询工作:

db.tm_stops.aggregate([ 
{ 
    $geoNear: 
    { near: [-82.958841, 42.370114] ,  
    distanceField: "stops.calculated", 
    query: { agency_key: "DDOT"}, 
    includeLocs: "stops.loc" } 
    } 
    ]) 

但我发现,返回的文档中,我只能看到计算距离和(LON,LAT)来计算距离对。我无法真正返回用于计算的整个嵌入式文档。

如果我找到一种方法来返回整个嵌入式文档,我会更新我的答案。

相关问题