2016-07-04 9 views
0

私の$プロジェクトの後で、私は文書の下になりますが、今はトランザクションの平均を調べる必要があります。以下 はMongodbでの集約とグループ

{ 
    "name" : "AAA", 
    "transactions" : [ 
    { 
     "amount" : 500000 
    }, 
    { 
     "amount" : 12700000 
    }, 
    { 
     "amount" : 27500000 
    } 
    ] 
} 
{ 
"name" : "BBBB", 
"transactions" : [ 
    { 
     "amount" : 2500000 
    }, 
    { 
     "amount" : 5500000 
    }, 
    { 
     "amount" : 18000000 
    } 

] 
} 
{ 
    "name" : "CCCC", 
    "transactions" : [ 
     { 
     "amount" : 10000000 
     }, 
     { 
     "amount" : 5000000 
     }, 
     { 
     "amount" : 1000000 
     } 

    ] 
} 

「$グループ」の前に、私はこのような何かを試してみました、私の '$のプロジェクトの後の文書​​です。

{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}} 

私は_idフィールドに名前の値を印刷していますが、「平均」は、ここで「NULL」

を印刷しているが、私は何をしないのです

{ "_id" : "AAA", "average" : null } 
{ "_id" : "BBB", "average" : null } 
{ "_id" : "CCC", "average" : null } 

を取得しています出力されますか?

答えて

2

集計フレームワークの$ groupステージの問題は、平均化するために合計するものはないということです。つまり、値の「純粋な」配列を扱っていますが、$ avg式は配列のすべての内容を合計するのに十分なインテリジェントではありません。あなたは配列全体の平均を取得しようとしています。これを達成するための正しい方法は、あなたが今、あなたが

{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}} 
のようになりますあなたの $グループ段階をこの

{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 500000} 
} 
{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 12700000} 
} 
{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 27500000} 
} 

のようなドキュメントを行うことができましたので、$前段にをほどくをしています

これは、トランザクション配列に含まれる各要素の平均を作成してから、各メンバーに対してドキュメントを作成する前に$ unwindします。

あなたはmongo大学でmongodbコースを取っていると思う、幸運!