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

Use variables in geonear aggregator in Python Eve with MongoDB

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

'OperationFailure: geoNear command failed: { ok: 0.0, errmsg: "'near' field must be point", code: 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 参数按预期工作。

为什么它不能使用变量?

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

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