Я пытаюсь использовать Еву запрос к базе данных MongoDB с оператором агрегации geoNear, но я получаю следующее при использовании агрегированных переменных:Использовать переменные в geonear агрегатор в Еве Python с MongoDB
«OperationFailure: команда geoNear не удалось: {оК: 0.0, ErrMsg: " 'рядом с' поле должно быть точка", код: 17304, кодовое название: "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 с запросом GET на адрес xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$lon":"10.5","$lat":"10.5","$maxDistance":100000}
.
Если $lon
и $lat
заменены жестко закодированными значениями, агрегатор работает отлично, поэтому, похоже, это связано с тем, как переменные помещаются в агрегатор. Моя первая мысль заключалась в том, что числа могут быть интерпретированы как строки, но параметр $maxDistance
работает так, как ожидалось.
Почему это не работает с переменными?
'' 'зарезервировано в MongoDB. Можете ли вы изменить имя переменных и попробовать? – Veeram
Переменные фактически заменяются на Eve до того, как они добираются до mongo (я уже пытался их изменить, это было основано на примере в документах Eve http://python-eve.org/features.html#mongodb-aggregation-framework). Я нашел решение сейчас, спасибо за ваше предложение, хотя – gfkeith