Python Eve 0.8:如何在$ centerSphere中执行$ geowithin?

时间:2018-08-22 10:01:19

标签: python mongodb eve

我们已经部署了一个Docker容器,在其中运行了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]}}})

现在,我们想使用Eve从HTTP接口访问这些观察结果。我们将之前的查询翻译为HTTP。我们尝试了许多组合,例如:

 http://127.0.0.1:5000/ObsStationTemp?where={"geometry": {"$geoWithin": {"$centerSphere": [ [4.92592, 51.969035],0.02]}}}

但是它们都不起作用。 这是夏娃服务器的回复:

{
   "_status": "ERR",
   "_error": {
       "code": 400,
       "message": "Query contains unknown or unsupported operators: $centerSphere"
   }
}

当前HTTP查询中缺少什么?任何帮助或分享一个例子?我们正在使用Eve 0.8,并且查询是使用PostMan执行的。谢谢。

1 个答案:

答案 0 :(得分:3)

  

我们正在使用Eve 0.8,并且查询是使用PostMan执行的。

这是因为PyEve(当前版本为0.8)不支持$centerSphere运算符。参见eve/io/mongo/mongo.py#L94-L102。您可以在PyEve's issue tracker上请求操作员支持。

另外,值得注意的是,AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); $geoWithin的使用仅在MongoDB v3.4 +上可用。