2016-07-04 13 views
0

Ich bekomme unten Dokumente nach meinem $ Projekt, aber jetzt muss ich den Durchschnitt der Transaktionen herausfinden. Im Folgenden sind die Dokumente nach meinem ‚$ Projekt‘, vor ‚$ group‘Aggregation und Gruppe in 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 
     } 

    ] 
} 

ich so etwas wie dies versucht.

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

Ich drucke Name Werte in _id Feld aber die 'durchschnittliche' druckt 'null'

hier ist der Ausgang Ich erhalte

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

was bin ich dabei?

Antwort

2

Das Problem mit Ihnen $ Gruppe Bühne auf dem Aggregation Framework, ist, dass es nichts zu summieren, um einen Durchschnitt zu machen. Ich meine, Sie arbeiten mit dem "reinen" Array von Werten, aber der $ avg-Ausdruck ist nicht intelligent genug, um den gesamten Inhalt des Arrays zusammenzufassen. Sie versuchen, einen Durchschnitt des Arrays als Ganzes zu erhalten. Der richtige Weg, dies zu erreichen, tut ein $ auf einem früheren Stadium entspannen, so dass Sie Dokumente bekam wie diese

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

jetzt können Sie Ihre $ group Bühne tun, die wie

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

Dies wird einen Durchschnittswert für jedes Element im Transaktions-Array machen, das Sie $ abwickeln, bevor Sie ein Dokument für jedes Mitglied haben.

Ich glaube, Sie nehmen einen Mongodb-Kurs auf Mongo-Universität, viel Glück!