2016-07-06 18 views
0

私はモーターでこのクエリ(CLIクエリとしてほぼ正確に見えます)があります。

response = yield self.db.orders.aggregate([ 
     {'$match': {'reader.uid': reader.get('uid'), 'status': {'$in': statuses}}}, 
     {'$sort': {'create_datetime': -1}}, 
     {'$project': {'_id': 1, 'status': 1, 'create_datetime': 1, 'documents': 1}}, 
     {'$group': { 
      '_id': 0, 
      'info': {'$push': {'status': '$status', 'create_datetime': '$create_datetime', 'documents': '$documents'}}, 
      'total': {'$sum': 1} 
     }}, 
     {'$skip': skip}, 
     {'$limit': int(limit)} 
    ]) 

$skip$limit前に、ドキュメントの合計数を取得する必要があります。わからない、どのように正確に$sum作業が、このクエリでは、私が正しい結果を得るが、私は実際_idを渡すとき、total値は1です:

 {'$group': { 
      '_id': '$_id', 
      'info': {'$push': {'status': '$status', 'create_datetime': '$create_datetime', 'documents': '$documents'}}, 
      'total': {'$sum': 1} 
     }}, 

私は本当の_id、右total値を取得したいです結果。

Mongoの初心者の方は、すべての回答が高く評価されています。

+0

なぜあなたは_idでグループ化すると合計= 0が得られるのか分かりませんが、確かに間違いはありませんか?あなたの_idのタイプは何ですか? – sergiuz

+0

はい、私は1、私の間違いを得る! – asyndrige

答えて

1

$groupグループ/特定の_idに基づいてすべてのドキュメントをまとめてグループ化します。

_id=0でドキュメントをグループ化すると、すべてが同じ_id0)を持つため、すべてのドキュメントは同じグループになります。 $sumは、同じグループ内のすべての文書を指定値である1で数えます。

あなたの元_idでグループと_idは、グループ内のその_id => 1つの文書で一つだけの文書があるので、あなたがsum=1を取得する必要がありますあなたのコレクション全体で一意です。

+0

つまり、私は同じフィールド、例えば 'reader.uid'でグループ化できますか?このようにして、私は必要な結果を得て、元の '_id'を' info'にプッシュしました。 – asyndrige

+0

はい、任意のフィールドでグループ化できます。 – sergiuz

関連する問題