2016-07-06 18 views
1

我有2個服務提供商和家長收藏。Mongo獲取指定位置10英里以內的所有文檔

的ServiceProvider(_id,ServiceProviderID,...)

父母(_id,ID,位置:[緯度,經度],...)

的ServiceProvider收藏ServiceProviderID鏈接到父母收藏的ID。

我希望位於10英里以內的所有服務提供商。

所以基本上我想加入ServiceProvider和Parents集合並列出位於10英里範圍內的所有ServiceProvider。

我曾嘗試以下查詢:

db.ServiceProvider.aggregate([ 
    { 
     $lookup: 
     { 
      from: "Parents", 
      localField: "ServiceProviderID", 
      foreignField: "ID", 
      as: "ServiceProviderArr" 
     } 
    }, 
    { 
     $match: { "ServiceProviderArr": { $ne: [] } } 
    } 
]) 

它給了我下面的結果:

{ 
    "_id" : ObjectId("577cc2ce588aec59178b4567"), 
    ... 
    "ServiceProviderArr" : [ 
     { 
      "_id" : ObjectId("577cbe33588aecf6168b45c6"), 
      "ID" : "193", 
      ... 
      "Location" : { 
       "Lat" : "40.75368539999999", 
       "Long" : "-73.9991637" 
      } 
     } 
    ] 
} 
+0

我的答案能解決你的問題嗎? – sergiuz

+0

@SergiuZaharie是的,你的回答確實有幫助。謝謝! – Chinmay

回答

1

如果我沒有理解好,此查詢可能是你需要的東西:

db.Parents.aggregate([ 

    { $geoNear: { 
       near: { type: "Point", coordinates: [ 0, 0 ] }, 
       spherical: true, 
       distanceField: "dist.calculatedd", 
       maxDistance: 10 
      } 
    }, 
    { $lookup: { 
      from: "ServiceProvider", 
      localField: "ID", 
      foreignField: "ServiceProviderID", 
      as: "ServiceProviderArr" 
     } 
    } 
]).pretty() 

您需要相應地更改您的中心點座標和最大距離

相關問題