Python Eve 0.8: как выполнить $ geowithin с $ centerSphere?

1

Мы развернули контейнер докеров, в котором работает база данных 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

1 ответ

3
Лучший ответ

Мы используем Eve 0.8, и запрос выполняется с помощью PostMan.

Это связано с тем, что PyEve (в настоящее время версия 0.8) не поддерживает оператор $ centerSphere. См. Eve/io/mongo/mongo.py # L94-L102. Вы можете отправить запрос на отслеживание проблем PyEve для поддержки оператора.

Дополнительно стоит отметить, что использование $geoWithin с $centerSphere доступно только на MongoDB v3. 4+.

  • 0
    Большое спасибо! Следуя вашей рекомендации, я открыл новый выпуск здесь: github.com/pyeve/eve/issues/1181
  • 1
    Поддержка $centerSphere была добавлена в Eve v0.8.1-dev.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню