MongoDB/PyMongo 地理空间查询 : distance of documents from a point

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

最佳答案

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

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

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

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

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

关于MongoDB/PyMongo 地理空间查询 : distance of documents from a point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931285/

相关文章:

MongoDB-Community 未在 Mac 上启动并出现错误

javascript - 仅返回 MongoDB 查询中一个字段的不同值

postgresql - 内存中数据的典型大小与数据库元组中数据的典型大小是多少?

MongoDB 点符号查询

python - import pymongo 导致 `ImportError: cannot import name BSON` 。你如何修复导入错误?

python - 如何使用 pymongo 在 mongodb 中查询日期?

java - spring data mongodb版本与spring的兼容性

c# - 带有 MongoDB .NET 驱动程序的 Azure DocumentDB : how to set id manually?

python - 如何在Python中以一定的速度在两个地理位置之间迭代(3)

database - 我的数据库中需要空间索引吗?