2014-10-19 125 views
1

的平均我有一個MongoDB的文件是這樣的:MongoDB中得到dictfield /嵌入文檔

{ 
    ... 
    score: 200, 
    timing: { 
    rT: 124 
    }, 
    utc_timestamp: ISODate("2014-10-19T04:45:04.772Z") 
} 

我可以用這個查詢得到score平均:

System._get_collection().aggregate([ 
      { "$match": { 
       "system_id": system.id, 
       "utc_timestamp": { 
        "$gte": datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) - datetime.timedelta(days=1), 
        "$lt": datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) 
       } 
      }}, 
      { "$group": { 
       "_id": { "$dayOfYear": "$utc_timestamp" }, 
       "delay": { "$avg": "$score" }, 
       "up": { 
        "$sum": { "$cond": [ 
         { "$eq": [ "$result", 405 ]}, 1, 0 
        ]} 
       }, 
       "total_count": { "$sum": 1 } 
      }}, 
      { "$project": { 
       "airtime": { 
        "$cond": [ 
         { "$eq": [ "$up", 0 ] }, 
         0, 
         { "$multiply" : [{"$divide": [ "$up", "$total_count" ]}, 100] } 
        ] 
       }, 
       "delay": 1 
      }} 
     ]) 

注行:

"delay": { "$avg": "$score" },

如何獲得平均值timing字典裏面的rT字段?

這不起作用:

{ "$avg": "$timing.rT" }

+0

如何「不起作用」? '{「$ avg」:「$ timing.rT」}'看起來不錯,應該可以工作。 – famousgarkin 2014-10-19 05:35:00

+0

其實,它看起來像平均值爲'0',所以它正在工作。如果你想要一個答案,語法是正確的,我很高興接受。 – okoboko 2014-10-19 05:56:43

回答

0

{ "$avg": "$timing.rT" }的語法是正確的,應該很好地工作。