2

在 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

现在,如果我只搜索原点,没有目标,我不会收到有关'$within'的错误。我究竟做错了什么?

4

2 回答 2

4

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

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

您的第二个查询文档被解释为进行投影,这就是您收到带有“不支持的投影选项:$within”的 OperationFailure 的原因。

于 2013-09-18T20:21:20.707 回答
1

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

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

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

于 2013-09-12T23:29:06.020 回答