MongoDB中的地理位置查询
Posted
技术标签:
【中文标题】MongoDB中的地理位置查询【英文标题】:GeoLocation query in mongo db 【发布时间】:2018-09-28 18:21:46 【问题描述】:如何使用 mongo 集合中的 mongodb 查询获取经度和纬度 基于距离和某些坐标。
"_id" : ObjectId("5a559b13ae201d0c05cb6f6a"),
"id" : "99623",
"city" : "Wasilla",
"cnty" : "Matanuska Susitna",
"cntyFips" : null,
"st" : "AK",
"stName" : "Alaska",
"areaCode" : "907",
"lat" : 61.5816,
"long" : -149.4393,
"rgn" : "West",
"__v" : 0
在本文档中,“lat”代表纬度,“long”代表经度。
所以基本上我必须根据当前的 id lat 和 long 获取所有 id,这些 id 在特定的英里距离范围内。
【问题讨论】:
【参考方案1】:我们需要更多关于您正在查询的文档结构的信息,但这里是 Mongo 文档here 中提供的查询的简单示例。 值得注意的是,您需要对定义为 GeoJSON 点的位置数据使用 2dsphere 索引才能使其生效。
$nearSphere:
$geometry:
type : "Point",
coordinates : [ <longitude>, <latitude> ]
,
$minDistance: <distance in meters>,
$maxDistance: <distance in meters>
【讨论】:
我有一个文档,其中包含纬度和经度以及 id 作为邮政编码。 “_id”:ObjectId(“5a559b13ae201d0c05cb6f6a”),“id”:“99623”,“city”:“Wasilla”,“cnty”:“Matanuska Susitna”,“cntyFips”:null,“st”:“AK” , "stName" : "Alaska", "areaCode" : "907", "lat" : 61.5816, "long" : -149.4393, "rgn" : "West", "__v" : 0 在本文档中 lat 用于纬度和经度是经度。所以基本上我必须根据当前 id lat 和 long 获取所有 id,这些 id 在特定的英里距离范围内。 是否可以更新您的数据结构,或者您是否被锁定在格式中?您可以编写一个复杂的查询来获取信息,但最好、最快地将数据坐标转换为 GeoJSON 格式。 thnx @Genthe 我以 GeoJSON 格式管理我的文档结构。 所以现在一切都为您工作,还是您还需要帮助? 太好了。很高兴你被分类了。【参考方案2】:Mongo 支持GeoJSON,它应该允许您轻松地对这些类型的数据执行基本查询。示例包括针对您的特定用例的 $geoWithin
。
【讨论】:
以上是关于MongoDB中的地理位置查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 java 的 MongoDb $near 查询没有给出正确的位置
具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311