我正在尝试使用Eve通过geoNear聚合运算符查询MongoDB数据库,但是在使用聚合变量时我得到以下内容:
'OperationFailure:geoNear命令失败:{ok:0.0,errmsg:“'near'字段必须为point”,代码:17304,codeName:“Location17304”}'
聚合端点在settings.py中设置如下:
geoAggr = {'datasource':{
'source':'geo',
'aggregation': {
'pipeline': [
{'$geoNear':{
'near': {'type':'Point', 'coordinates':['$lon', '$lat']},
'distanceField':'distance',
'maxDistance':'$maxDistance',
'spherical': True,
'query':{
'recentAnalyses.KeywordCombinationAll /300 v1':{
'$exists': True
}
}
}}
]
}
}}
使用POSTMAN查询xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$lon":"10.5","$lat":"10.5","$maxDistance":100000}
的GET请求。
如果$lon
和$lat
被硬编码值替换,则聚合器工作正常,因此它似乎与变量放入聚合器的方式有关。我的第一个想法是数字可能被解释为字符串,但$maxDistance
参数按预期工作。
为什么不使用变量?
答案 0 :(得分:2)
看来数组中的变量没有被替换(我不确定这是否在所有情况下都是正确的,但它在这一个中),这是有道理的。
使用'coordinates':['$lon', '$lat']
替换'coordinates':'$coords'
并使用xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$coords":[10.5,10.5],"$maxDistance":100000}
进行访问。