PyMongo / MongoDB - Origin和Destination LatLon的地理空间查询

时间:2013-09-12 20:33:22

标签: python mongodb geospatial pymongo

在Python中使用PyMongo,我试图在设定半径内对Origin LatLon和Destination LatLon进行GeoSpatial查询,并打印第一个结果。我下面的内容是我认为的那样,但是我得到了一个错误。什么是正确的方法?

代码:

origin = [float(44.8697193), float(13.8414046)]
dest = [float(48.1367203), float(11.576754)]
query = db.collection.find({'origLatLng': {'$within': {'$center': [origin,.75]}}}, {'destLatLng': {'$within': {'$center': [dest,.75]}}})[0]
print query

错误:

pymongo.errors.OperationFailure: database error: Unsupported projection option: $within

现在,如果我只搜索原点,没有dest,我就不会在中得到关于'$的错误。我做错了什么?

2 个答案:

答案 0 :(得分:4)

我认为您的查询语法有问题。您实际上有两个查询文档,一个用于origLatLng,另一个用于destLatLng。我想你的意思是这样做:

query = db.collection.find({'start': {'$within': {'$center': [origin,.75]}}, 'end': {'$within': {'$center': [dest,.75]}}})[0]

您的第二个查询文档被解释为执行投影,这就是为什么您正在使用“不支持的投影选项$within”获取OperationFailure。

答案 1 :(得分:1)

不确定您使用的实际MongoDB版本但$within已被弃用,现在您应该使用$geoWithin

http://docs.mongodb.org/manual/reference/operator/geoWithin/

另请参阅上面的链接以获取更多选项。我不是Python的专家,但我希望$geoWithin能解决你的问题。