我无法让Mongoengine的地理空间查询工作。我有一个User
mongoengine类,其中有一个名为cached.geoLoc
的字段,该字段属于mongoengine类型PointField()
。如果我打电话
User.objects(cached__geoLoc__near=[100,100])
然后它返回答案。但是,如果我想将结果限制在有限的半径范围内,请致电:
User.objects(cached__geoLoc__near=[100,100], cached__geoLoc__max_distance=1000)
然后我收到错误:pymongo.errors.OperationFailure: database error: Can't canonicalize query: BadValue geo near accepts just one argument when querying for a GeoJSON point. Extra field found: $maxDistance: 1000
我使用MongoEngine版本0.8.7和MongoDB 2.4可能是什么问题?
答案 0 :(得分:2)
我在这里尖叫着。
如果我尝试使用类似以下内容的类似数据集:
class Geo(Document):
loc = PointField()
result = Geo.objects(loc__near=[3,6], loc__max_distance=1000)
然后发出给MongoDB的结果查询是这样的:
{
"loc" : {
"$near" : {
"$geometry" : {
"type" : "Point",
"coordinates" : [ 3, 6 ]
}
},
"$maxDistance" : 1000
}
}
问题是$maxDistance
修饰符位于错误位置。
使用raw pymongo驱动程序命令发出的正确查询表单可以正常工作:
result = Geo._get_collection().find({
"loc": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [3,6]
},
"$maxDistance": 1000
}
}
}):
主要是因为我们发布了$maxDistance
修饰符,它应该是"在" $near
运算符参数。
提交错误。但是,您可以使用直接语法将结果作为解决方法,直到有修复。