2014-10-19 2 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" },

Как получить среднее значение поле rT внутри словаря timing?

Это не работает:

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

+0

Как «не работает»? '{" $ Avg ":" $ timing.rT "}' выглядит хорошо и должно работать. – famousgarkin

+0

На самом деле, похоже, что среднее значение равно «0», поэтому оно работает. Если вы хотите ответить, что синтаксис верен, я рад принять его. – okoboko

ответ

0

Синтаксис { "$avg": "$timing.rT" } правильно и должно работать нормально.

Смежные вопросы