2017-09-11 3 views
1

私は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'}}]} 
          }, 

        } 
+2

それを自分自身を使用しますが、[ドキュメントの迅速な閲覧]からかなり確信してはいけない(のhttp:/ /python-eve.org/features.html#mongodb-aggregation-framework)実際には、構成の中で「ピープライン」を指定することを意図しており、URLの一部ではありません。 URLパラメータは、代わりに「変数置換」で使用されるように見えます。パイプライン全体をパラメータとして渡すのではなく、エンドポイントでパイプラインを設定するのが理想的です。 –

+0

Neilに感謝していますが、依然としてクエリの同じ問題が無視され、すべてのドキュメントが返されています – SAB

答えて

0

ソート...しかし、別の質問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'}}]} 
          }, 

        } 
関連する問題