私はpython eveを使って非常に軽量のAPIを開発しています。これはmongodbデータベースにアクセスします。データベース内の各ドキュメントにはgeomフィールドがあり、このフィールドには2次元の球インデックスがあります。PostgreSQL(およびpython eve)がmongodbで実行されたときに同じ結果を返す
私はモンゴでこのクエリを実行すると、それは完璧に動作し、非常に迅速に
db.api.aggregate({"$geoNear": {"near": {"type": "Point", "coordinates": [-1.11, 51.69]}, "distanceField": "distance", "maxDistance": 100, "num": 2, "spherical": "true"}}).pretty()
しかし、私は郵便配達でこれを実行すると、それはちょうど私は基本的に持っているすべてのものを返し、クエリ
http://localhost:8090/data?aggregate={"$geoNear": {"near": {"type": "Point", "coordinates": [-1.11, 51.69]}, "distanceField": "distance", "maxDistance": 100,"num": 2,"spherical": "true"}}
を無視Eveで設定されたスキーマです。これは_idだけを返しますが、クエリの一部として作成された距離フィールドは返しません。私はpostmanの構文が正しいなら、これがうまくいくという前提で実行していますが。
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'}
}
}
を設定している最後に、次のドメインは、郵便配達のクエリですべてのヘルプ
DOMAIN = {'line_info': line_info_item}
を追加、またはあなたは残りの部分にエラーを見つけたなられます大変感謝しています。
EDIT:
私は以下のニールの答えに従って、エンドポイント上のパイプラインを設定するが、それはまだクエリを無視し、すべてを返します。
DOMAIN = {'line_info': line_info_item,
'aggregation': {
'pipeline': [{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": ["$coords"]
},
"distanceField": "distance",
"maxDistance": "$maxDist",
"num": 10,
"spherical": "true"
}
}]
}
}
スキーマを無視したが、郵便配達のクエリURLは、作業の
http://localhost:8090/data?aggregate={"$maxDist":500, "$coords":[-1.477307, 50.931700]}
EDIT
ソートです...しかし、推測では、別の質問のthats。
項目に集約パイプラインを移動し、周りの角括弧を削除「$ 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'}}]}
},
}
それを自分自身を使用しますが、[ドキュメントの迅速な閲覧]からかなり確信してはいけない(のhttp:/ /python-eve.org/features.html#mongodb-aggregation-framework)実際には、構成の中で「ピープライン」を指定することを意図しており、URLの一部ではありません。 URLパラメータは、代わりに「変数置換」で使用されるように見えます。パイプライン全体をパラメータとして渡すのではなく、エンドポイントでパイプラインを設定するのが理想的です。 –
Neilに感謝していますが、依然としてクエリの同じ問題が無視され、すべてのドキュメントが返されています – SAB