在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,我就不会在中得到关于'$的错误。我做错了什么?
答案 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
能解决你的问题。