Estoy tratando de usar Eve para consultar una base de datos MongoDB con el operador de agregación geoNear, pero obtengo lo siguiente cuando uso variables agregadas:
'OperationFailure: el comando geoNear falló: { ok: 0.0, errmsg: "el campo 'cercano' debe ser un punto", código: 17304, codeName: "Ubicación17304" }'
El punto final de agregación se configura en settings.py de la siguiente manera:
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 } } }} ] } }} Se consulta mediante POSTMAN con una solicitud GET a xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$lon":"10.5","$lat":"10.5","$maxDistance":100000} .
Si $lon y $lat se reemplazan por valores codificados, el agregador funciona perfectamente, por lo que parece tener algo que ver con la forma en que se colocan las variables en el agregador. Lo primero que pensé fue que los números pueden interpretarse como cadenas, pero el parámetro $maxDistance funciona como se esperaba.
¿Por qué no funciona con las variables?
Parece que las variables dentro de las matrices no se reemplazan (no estoy seguro de si esto es correcto en todos los casos, pero lo es en este), lo que tiene sentido.
Reemplazando 'coordinates':['$lon', '$lat'] con 'coordinates':'$coords' y accediendo con xxx.xxx.xxx.xxx:5000/geoAggr?aggregate={"$coords":[10.5,10.5],"$maxDistance":100000} funciona.