gpt4 book ai didi

通过 zip 进行 MongoDB 地理空间搜索

转载 作者:可可西里 更新时间:2023-11-01 10:04:23 25 4
gpt4 key购买 nike

我正在使用 MongoDB 进行一些地理空间查询。我的邮政编码集合如下所示:

{
_id: "60661",
city: "CHICAGO",
state: "IL",
loc: [
-87.68,
41.83
]
}

添加二维索引后,我可以成功运行以下查询:

db.zipcodes.find({ loc: { $near: [ -87.68, 41.83 ], $maxDistance: 5*(1/69) } })

这将返回发送的经/纬度坐标 5 英里范围内的所有邮政编码。

我将如何发送邮政编码而不是经/纬度位置?像这样:

db.zipcodes.find({ loc: { $near: "60661", $maxDistance: 5*(1/69) } })

谢谢!

最佳答案

这不是地理空间索引的工作方式,也不是查询的工作方式。考虑一下,当您创建索引时,您的语句可能是这样的:

db.zipcodes.ensureIndex({ "loc": "2d" })

因此,您要求在“loc”字段上创建一个 2d 索引,该字段还包含地理空间索引所需格式的数据。这意味着它在“loc”字段中索引数据。

您打算以某种方式提供另一个不是“loc”的字段作为查询的一部分,因此与数据无关。这根本行不通,因为该数据不在“loc”字段中。本质上,这与在“州”字段下查询“城市”的值没有什么不同。地理空间查询中的字段选择没有什么特别的魔法,只是从索引中选择范围的工具。

不过,混合查询形式并没有错,所以如果您想以其他方式过滤更多细节的结果,而不仅仅是与给定点的接近程度,您可以这样做:

 db.zipcodes.find({
"loc": {
"$near": [ -87.68, 41.83 ],
"$maxDistance": 5*(1/69)
},
"_id": { "$gte": "60630", "$lte": "60680"}
})

它不仅会找到离查询点最近的点,还会将这些结果限制为范围内的那些邮政编码。

如果实际上您要查找的只是不知道点坐标但知道“邮政编码”,那么您需要发出两个查询才能获得结果。

var zipLoc = db.zipcodes.findOne({ "_id": "60661" })
var results = db.zipcodes.find({
"loc": {
"$near": zipLoc.loc,
"$maxDistance": 5*(1/69)
}
})

这就是您要返回某个“邮政编码”附近的结果所要做的事情。

关于通过 zip 进行 MongoDB 地理空间搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com