2017-01-12 13 views
1

私は現在のプロジェクトでmongoDBのためのモーター非同期クライアントを使用しています。私はグループのような集計をクエリに使用したいと思います。ドキュメントにはグループに関する短い情報が含まれていますが、例はありません。Motor 1.1でグループ化する方法は?

パラメータ:

  1. キー:グループへのフィールド条件
  2. (説明上記参照)によって(検索()クエリ 仕様として)考慮すべき行の仕様
  3. 初期初期集計カウンタオブジェクトの値
  4. reduce:集計関数をJavaScript文字列として使用

私は正確に何が初期パラメータと還元を意味するのか分かりません(javascript文字列として)? 例を教えてもらえますか?

+0

私はモーターは、集計方法を使用することができている私たちはネイティブのMongoDBクエリーLANGを使用するパイプラインを、適用することができ、考え出しました。しかし、私は方法群()について知りたいです。 – Oleksiy

答えて

1

Motorのgroupメソッドは、PyMongoと同じパラメータをとります。モーターにPyMongo group exampleを適応:

from bson.code import Code 
from tornado import ioloop, gen 
from motor import MotorClient 

reducer = Code(""" 
       function(obj, prev){ 
       prev.count++; 
       } 
       """) 

db = MotorClient().test 


@gen.coroutine 
def example(): 
    yield db.things.remove({}) 
    yield db.things.insert_many([ 
     {'x': 1}, 
     {'x': 2}, 
     {'x': 2}, 
     {'x': 3}, 
    ]) 

    results = yield db.things.group(key={"x": 1}, condition={}, 
            initial={"count": 0}, reduce=reducer) 
    for doc in results: 
     print(doc) 


ioloop.IOLoop.current().run_sync(example) 

この版画:

{'count': 1.0, 'x': 1.0} 
{'count': 2.0, 'x': 2.0} 
{'count': 1.0, 'x': 3.0} 
+0

しかし、集約は高速で、断片化され、索引を使用します。私は "グループ"以上の集約フレームワークをお勧めします。 –

+0

だから、本当に減速機にjsコードが必要ですか?集約については、コードが少なくて済み、シンプルに見える=> mongo用のnosqlのみ – Oleksiy

関連する問題