MongoDB / PyMongo地理空间查询:文档与点的距离

时间:2013-09-21 09:58:44

标签: mongodb geospatial pymongo

我最近将我的MongoDB从版本2.2.1升级到版本2.4.6,将pymongo升级到2.6.2。

升级的原因之一是新版MongoDB能够计算并返回地理空间查询as explained here中心的文档距离(包括正确的坐标)。

到目前为止,我执行以下查询:

db.collection.find({"loc": {"$within": {"$center": [[LON, LAT], RADIUS]}}})

其中LON,LAT和Radius是正确的数字。然后,我以编程方式计算返回的每个文档与中心的距离。

现在我正在尝试让MongoDB代表我进行距离计算,因为与我的代码相比效率更高。

我现在正在尝试的是以下内容:

db.collection.find({"loc": {"$geoWithin": {"$centerSphere": [[LON, LAT], RADIUS]}}})

现在正确计算RADIUS(半径,以km / 6371为单位),但我得到的结果与旧查询相同。

我应该如何更改新查询,以便返回每个返回的文档的额外字段“dis”?

地理空间索引是2D,应根据文档工作,但如果需要,我可以将其更改为2dphere。有没有人有好的建议?

1 个答案:

答案 0 :(得分:3)

尝试在聚合框架中使用$ geoNear命令。 $ geoNear文档在这里:

http://docs.mongodb.org/manual/reference/aggregation/geoNear/

您的查询最终会如下所示:

db.collection.aggregate([{$geoNear:{near:[LON,LAT],distanceField:"distance",maxDistance:RADIUS,spherical:true}}])

,生成的文档将包含一个名为“distance”的字段,其中包含计算值。希望有所帮助。