我正在使用python eve开发一个非常轻量级的API,它可以访问mongodb数据库。数据库中的每个文档都有一个geom字段,该字段上有一个2d球体索引。
当我在mongo中运行此查询时,它可以非常快速地运行
import java.io.*;
public class test
{
public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int i;
System.out.println("Enter no of processes ");
try{
int no_of_process=Integer.parseInt(br.readLine());
int process[]=new int[no_of_process];
System.out.println("Enter the values");
for(i=0;i<no_of_process;i++)
process[i]=Integer.parseInt(br.readLine());
for(i=0;i<no_of_process;i++)
System.out.println(process[i]);
}
catch(NumberFormatException n)
{
System.out.println(n.getMessage());
}
}
}
但是当我在邮差中运行它时,它只返回所有内容并忽略查询
db.api.aggregate({"$geoNear": {"near": {"type": "Point", "coordinates": [-1.11, 51.69]}, "distanceField": "distance", "maxDistance": 100, "num": 2, "spherical": "true"}}).pretty()
我在Eve中设置了基本架构,部分工作原理。它只返回_id而不返回作为查询的一部分创建的距离字段。虽然我的假设是,只要我有邮递员的语法正确,这就行了。
http://localhost:8090/data?aggregate={"$geoNear": {"near": {"type": "Point", "coordinates": [-1.11, 51.69]}, "distanceField": "distance", "maxDistance": 100,"num": 2,"spherical": "true"}}
我也设置了这个项目
api_shema = {'_id': {'type': 'string'},
'distance': {'type': 'string'}
}
最后添加以下域名
line_info_item = {'item_title': 'line_info',
'resource_methods': ['GET'],
'schema': api_shema,
'datasource': {
'source': 'api',
'filter': {'_type': 'line'}
}
}
任何有关邮递员查询的帮助,或者如果您发现其他任何错误,我们将不胜感激。
编辑:
我根据Neil的回答在端点上设置了管道,但是它仍然忽略了查询并返回了所有。
DOMAIN = {'line_info': line_info_item}
邮差查询网址是
DOMAIN = {'line_info': line_info_item,
'aggregation': {
'pipeline': [{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": ["$coords"]
},
"distanceField": "distance",
"maxDistance": "$maxDist",
"num": 10,
"spherical": "true"
}
}]
}
}
修改
虽然忽略了架构,但工作有点......但我猜这是一个不同的问题。
将聚合管道移动到项目中并移除方括号&#34; $ coords&#34;
http://localhost:8090/data?aggregate={"$maxDist":500, "$coords":[-1.477307, 50.931700]}
答案 0 :(得分:0)
虽然忽略了架构,但工作有点......但我猜这是一个不同的问题。
将聚合管道移动到项目中并删除“$ coords”
周围的方括号river_relate_item = {'item_title': 'line_info_item',
'resource_methods': ['GET'],
'schema': api_shema,
'datasource': {
'source': 'api',
'filter': {'_type': 'line'},
'aggregation': {'pipeline': [{'$geoNear':{'near':{'type': 'point', 'coordinates': '$coords'},'distanceField': 'distance','maxDistance': '$maxDist','num': 1, 'spherical': 'true'}}]}
},
}