Mongo获取指定位置10英里范围内的所有文件

时间:2016-07-06 09:54:44

标签: mongodb geolocation

我有2个收集ServiceProvider和Parents。

ServiceProvider(_id,ServiceProviderID,...)

家长(_id,ID,位置:[Lat,Long],...)

ServiceProvider集合的ServiceProviderID链接到Parents集合的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"
            }
        }
    ]
}

1 个答案:

答案 0 :(得分: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()

您需要相应地更改中心点坐标和最大距离

相关问题