Мы развернули контейнер докеров, в котором работает база данных MongoDB. Это простая база данных, в которой мы храним геоданные данных датчика (например, температура, скорость ветра). Поскольку мы хотим запросить данные гео-ссылки, основанные на радиусе поиска, мы включили пространственные запросы следующим образом:
db.ObsStationTemp.createIndex({point:"2dsphere"})
db.ObsStationTemp.ensureIndex({"geometry":'2dsphere'})
Данные правильно попадают в MongoDB, и мы можем фактически выполнить пространственный запрос, например:
db.ObsStationTemp.find({geometry:{$geoWithin:{$centerSphere:[[4.925922,51.969035],2/3963.2]}}})
Теперь мы хотим получить доступ к этим наблюдениям с HTTP-интерфейса с помощью Eve. Мы перевели предыдущий запрос в HTTP. Мы пробовали много комбинаций, таких как:
http://127.0.0.1:5000/ObsStationTemp?where={"geometry": {"$geoWithin": {"$centerSphere": [ [4.92592, 51.969035],0.02]}}}
Но никто из них не работает. Это ответ сервера Eve:
{
"_status": "ERR",
"_error": {
"code": 400,
"message": "Query contains unknown or unsupported operators: $centerSphere"
}
}
Что нам не хватает в текущем HTTP-запросе? Любая помощь или общий пример? Мы используем Eve 0.8, и запрос выполняется с помощью PostMan. Благодарю.
Мы используем Eve 0.8, и запрос выполняется с помощью PostMan.
Это связано с тем, что PyEve (в настоящее время версия 0.8) не поддерживает оператор $ centerSphere. См. Eve/io/mongo/mongo.py # L94-L102. Вы можете отправить запрос на отслеживание проблем PyEve для поддержки оператора.
Дополнительно стоит отметить, что использование $geoWithin
с $centerSphere
доступно только на MongoDB v3. 4+.
$centerSphere
была добавлена в Eve v0.8.1-dev.