Запрос MongoDB и вычисление среднего для элементов вложенного массива

#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 , во-вторых.