2016-08-01 4 views
0

i war auf der Suche nach einem Weg, zusammenzufassen und in diesem Dokument ‚verschachtelte Werte‘ mitteln. Ich bin daran interessiert, die Anzahl der Kinder eines Benutzers zu mitteln. Diese Zeilen gaben mir ein Ergebnis von 0.Averaging Nested Werte

db.getCollection('users').aggregate([ 
    { 
$group: { 
    _id: "id", 
    Mean: { 
     $avg: "$data.details.MemberDetails.numberOfKids" 
    } 
    } 
}]) 

Ich habe einige Frage hier in Stackoverflow zu lesen, und das Problem, dass meine Daten in einem Objekt befindet, die in einem Array angeordnet sind, die in einem Objekt befinden Dies ist, wie die Daten aussehen. Jede Hilfe wird nützlich sein. Danke.

/* 1 */ 
{ 
>  "_id" : "160b2af1fdf06daf3", 
>  "userId" : "943af0fa65da28a4", 
>  "data" : { 
>   "details" : [ 
>    { 
>     "MemberDetails" : { 
>     
>       "numberOfKids" : 3, 
>       "Statuse" : "married", 
>     
>      }, 
>      "MemberDescroption" : { 
>       "hight" : 1.80, 
>       "wight" : 85, 
>      } 
>     } 
>    ] 
>    } 
> 
> } 

Antwort

2

Sie müssen zuerst das Array glätten, bevor die Dokumente gruppieren, verwenden Sie die $unwind Pipeline-Betreiber:

db.getCollection('users').aggregate([ 
    { "$unwind": "$data.details" }, 
    { 
     "$group": { 
      "_id": "id", 
      "Mean": { 
       "$avg": "$data.details.MemberDetails.numberOfKids" 
      } 
     } 
    } 
]) 
+0

Hallo, danke für die schnelle reagieren. Ich erhalte den nächsten Fehler, \t "errmsg": "Ausnahme: Unbekannter Name der Pipelinestufe: '$ uniwnd'", –

+0

@NatiBarchilon Danke, dass Sie den Tippfehler bemerkt haben; hatte "$ uniwnd" anstatt "$ unwind" geschrieben. Versuchen Sie es erneut und vergessen Sie nicht die Dokumentation auf [** '$ unwind' **] zu überprüfen (https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#pipe._S_unwind). – chridam

+1

Danke, habe es nicht bemerkt! also zum summieren würde ich das selbe machen, danke nochmal. –