在 Python Eve 和 MongoDB 中使用 geonear 聚合器中的变量
Use variables in geonear aggregator in Python Eve with MongoDB
我正在尝试使用 Eve 通过 geoNear 聚合运算符查询 MongoDB 数据库,但在使用聚合变量时我得到以下信息:
'OperationFailure: geoNear command failed: { ok: 0.0, errmsg: "'near' field must be point", code: 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
参数按预期工作。
为什么它不能使用变量?
数组中的变量似乎没有被替换(我不确定这是否在所有情况下都是正确的,但在这个情况下是正确的),这是有道理的。
将 'coordinates':['$lon', '$lat']
替换为 'coordinates':'$coords'
并使用 xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$coords":[10.5,10.5],"$maxDistance":100000}
进行访问。
我正在尝试使用 Eve 通过 geoNear 聚合运算符查询 MongoDB 数据库,但在使用聚合变量时我得到以下信息:
'OperationFailure: geoNear command failed: { ok: 0.0, errmsg: "'near' field must be point", code: 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
参数按预期工作。
为什么它不能使用变量?
数组中的变量似乎没有被替换(我不确定这是否在所有情况下都是正确的,但在这个情况下是正确的),这是有道理的。
将 'coordinates':['$lon', '$lat']
替换为 'coordinates':'$coords'
并使用 xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$coords":[10.5,10.5],"$maxDistance":100000}
进行访问。