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" }
Как «не работает»? '{" $ Avg ":" $ timing.rT "}' выглядит хорошо и должно работать. – famousgarkin
На самом деле, похоже, что среднее значение равно «0», поэтому оно работает. Если вы хотите ответить, что синтаксис верен, я рад принять его. – okoboko