3

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

升级的原因之一是新版本的 MongoDB 能够计算并返回文档(包括正确的坐标)与地理空间查询中心的距离,如此处所述

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

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,应该根据文档工作,但如有必要,我可以将其更改为 2dsphere。有没有人有好的建议?

4

1 回答 1

3

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

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

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

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

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

于 2013-09-23T18:17:54.453 回答