14

私はフラスコ モンゴエンジンを使用して集計クエリを作成しようとしていますが、私が読んだことから、それが可能であるようには思えません。

いくつかのフォーラム スレッド、電子メール チェーン、および Stack Overflow に関するいくつかの質問に目を通しましたが、flask-mongoengine を使用して集約を実装する方法の本当に良い例は見つかりませんでした。

この質問には、「生の pymongo と集計機能」を使用する必要があるというコメントがあります。ただし、それがどのように機能するかの例はありません。私はPythonをいじくり回し、Flaskフレームワークを使用して基本的なアプリケーションを作成しましたが、本格的なアプリケーションを掘り下げてMongoに接続/クエリすることは私にとってかなり新しいことです.

誰かが私のフラスコ モンゴ エンジン モデルをどのように利用できるかの例 (または例へのリンク) を提供できますが、PyMongo で集計フレームワークを使用してクエリを実行できますか? これには MongoDB への 2 つの接続が必要ですか (1 つは PyMongo が集計クエリを実行するため、もう 1 つは MongoEngine を介した通常のクエリ/挿入/更新用)?

実行したい集計クエリの例は次のとおりです (このクエリは、Mongo シェルで必要な情報を正確に取得します)。

db.entry.aggregate([
    { '$group' : 
        { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 
          'count' : { '$sum' : 1 }
        }
    }
])

このクエリからの出力の例:

{ "_id" : { "carrier" : "Carrier 1", "category" : "XYZ" }, "count" : 2 }
{ "_id" : { "carrier" : "Carrier 1", "category" : "ABC" }, "count" : 4 }
{ "_id" : { "carrier" : "Carrier 2", "category" : "XYZ" }, "count" : 31 }
{ "_id" : { "carrier" : "Carrier 2", "category" : "ABC" }, "count" : 6 }
4

2 に答える 2

16

Mongoengine で定義するクラスには、実際には_get_collection()、pymongo ドライバーに実装されている「生の」コレクション オブジェクトを取得するメソッドがあります。

Modelこの例では、接続用に定義された実際のクラスのプレースホルダーとして、ここで名前を使用しています。

Model._get_collection().aggregate([
    { '$group' : 
        { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 
          'count' : { '$sum' : 1 }
        }
    }
])

したがって、別の接続を確立しなくても、いつでも pymongo オブジェクトにアクセスできます。Mongoengine 自体は pymongo に基づいて構築されています。

于 2014-06-26T00:48:36.647 に答える