2015-12-02 34 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)來計算距離對。我無法真正返回用於計算的整個嵌入式文檔。

如果我找到一種方法來返回整個嵌入式文檔,我會更新我的答案。

相關問題