#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
У меня есть коллекция lanes
, в которой есть документы следующей структуры. Изменяется только dist
и time
новых документов. Я хочу рассчитать средние скорости всех полос, сгруппированных по l_id
.
{
_id: 1213,
ab:[
{
l_id: 101,
dist: 100,
time: 100
},
{
l_id: 102,
dist: 140,
time: 120
},
{
l_id: 103,
dist: 10,
time: 10
}
]
}
вот так :
{[
{
l_id: 101,
avgspeed: 14
},
{
l_id: 102,
avgspeed: 19
},
{
l_id: 103,
avgspeed: 9
}
]}
Как это можно сделать с помощью запроса mongo aggregate / unwind?
РЕДАКТИРОВАТЬ 1: (как это сделать, структура выглядит следующим образом)
{
_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
}]
}
]
}
Комментарии:
1. Как вы вычисляете среднюю скорость?
2. что-то вроде этого … средняя скорость = doc [0] (dist) / doc [0] (время) doc [1] (dist) / doc [1] (время) …
Ответ №1:
db.Test2.aggregate([
{
$unwind: "$ab"
},
{
$unwind: "$ab.data"
},
{
$group:{
_id: "$ab.l_id",
avgspeed: {$avg:{$divide:["$ab.data.dist","$ab.data.time"]}}
}
}
]);
Комментарии:
1. Как бы мы это сделали, если структура документов похожа на показанную в отредактированном вопросе?
2. Привет, Даниэль, есть небольшая ошибка.
distance
должен быть первым аргументом иtime
, во-вторых.