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

Posted

技术标签:

【中文标题】Mongo 获取指定位置 10 英里内的所有文件【英文标题】:Mongo Get all the documents within 10 miles of location specified 【发布时间】:2016-07-06 09:54:43 【问题描述】:

我有 2 个收集服务提供者和父母。

ServiceProvider(_id, ServiceProviderID, ...)

父母(_id,ID,位置:[纬度,经度],...)

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"
            
        
    ]

【问题讨论】:

我的回答解决了你的问题吗? @SergiuZaharie 是的,您的回答确实很有帮助。谢谢! 【参考方案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()

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

【讨论】:

以上是关于Mongo 获取指定位置 10 英里内的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

从另一个邮政编码获取n英里半径内的所有邮政编码[关闭]

C#查找一英里内的所有纬度和经度

如何显示 2 英里内的位置?

如何返回邮政编码列表的## 英里半径内的所有实例

计算所有邮政编码都在 x 英里内的最小邮政编码集的函数

使用 geofire 仅检索 3 英里内的用户列表