2016-10-16 4 views
0

Ich habe eine Sammlung lanes, die Dokumente der folgenden Struktur hat. Nur die dist und time der neuen Dokumente ändert sich. Ich möchte Durchschnittsgeschwindigkeiten aller Bahnen berechnen, die nach gruppiert sind.MongoDB Abfrage und Berechnung Durchschnitt für verschachtelte Array-Elemente

{ 
    _id: 1213, 
    ab:[ 
     { 
      l_id: 101, 
      dist: 100, 
      time: 100 
     }, 
     { 
      l_id: 102, 
      dist: 140, 
      time: 120 
     }, 
     { 
      l_id: 103, 
      dist: 10, 
      time: 10 
     } 
    ] 
} 

wie folgt aus:

{[ 
    { 
     l_id: 101, 
     avgspeed: 14 
    }, 
    { 
     l_id: 102, 
     avgspeed: 19 
    }, 
    { 
     l_id: 103, 
     avgspeed: 9 
    } 
]} 

Wie kann es mit Mongo Aggregat erfolgen/query entspannen?

EDIT 1: (wie es die Struktur zu tun, wie folgt)

{ 
    _id: 1213, 
    ab:[ 
     { 
      l_id: 101, 
      data:[{ 
       dist: 100, 
       time: 100 
      }] 
     }, 
     { 
      l_id: 102, 
      data:[{ 
       dist: 140, 
       time: 120 
      }] 
     }, 
     { 
      l_id: 103, 
      data:[{ 
       dist: 10, 
       time: 10 
      }] 
     } 
    ] 
} 
+0

Wie Sie AvgSpeed ​​kalkulieren? – Sachin

+0

etwas wie das ... avgspeed = doc [0] (dist)/doc [0] (zeit) + doc [1] (dist)/doc [1] (zeit) ... – atulj

Antwort

1
db.Test2.aggregate([ 
    { 
    $unwind: "$ab" 
    }, 
    { 
    $unwind: "$ab.data" 
    }, 

    { 
    $group:{ 
     _id: "$ab.l_id", 
     avgspeed: {$avg:{$divide:["$ab.data.dist","$ab.data.time"]}} 
    } 
    } 
]); 
+0

Wie würden wir es machen? Wenn die Struktur der Dokumente wie in der bearbeiteten Frage angezeigt wird? – atulj

+0

ich habe gerade die Antwort aktualisiert –

+0

Hey Daniele, es ist ein kleiner Fehler. "Abstand" sollte das erste Argument sein und "Zeit", zweite. – atulj

Verwandte Themen