在Python Eve和MongoDB中使用geonear聚合器中的变量

时间:2017-01-19 01:06:21

标签: mongodb eve

我正在尝试使用Eve通过geoNear聚合运算符查询MongoDB数据库,但是在使用聚合变量时我得到以下内容:

  

'OperationFailure:geoNear命令失败:{ok:0.0,errmsg:“'near'字段必须为point”,代码: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参数按预期工作。

为什么不使用变量?

1 个答案:

答案 0 :(得分:2)

看来数组中的变量没有被替换(我不确定这是否在所有情况下都是正确的,但它在这一个中),这是有道理的。

使用'coordinates':['$lon', '$lat']替换'coordinates':'$coords'并使用xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$coords":[10.5,10.5],"$maxDistance":100000}进行访问。