Вложенная запись в mongodb, сумма и среднее значение только по максимальному количеству подполя

У меня есть БД, которая содержит документы, т.е.:

{ id: "first_document", document: [
{page: 1, content: "text"},
{page: 2, content: "text"},
{page: 3, content: "text"}]}, 

{ id: "second_document", document: [
{page: 1, content: "text"}, 
{page: 2, content: "text"}]}

и так далее, с несколькими документами разного размера.

Мне нужно найти среднее и общее количество страниц во всех документах.

Я сделал несколько попыток с разными конвейерами, но не могу найти решение. Пример базового теста, который я сделал:

[{ "$unwind": "$document" }, 
{ "$group":{"_id": None,"average_pages": {"$avg" : "$document.page"}}}]

но это, конечно, делает среднее (и сумму) по всем записям.

Как сделать среднее и суммировать только максимальное количество страниц? (в приведенном примере среднее и сумма только между 3 и 2).

Ожидаемый результат для этого примера:

среднее = 2,5

сумма = 5


person FMarazzi    schedule 15.05.2019    source источник
comment
Не могли бы вы также показать ожидаемый результат   -  person Ashh    schedule 15.05.2019


Ответы (1)


Попробуйте с этим

collection.aggregate([
{
 "$unwind": {
           path:"$document" ,
           preserveNullAndEmptyArrays:true
     } 
},
{
$group:{
    _id:"$_id",
    totalPage:{$sum:1},
    average:{$avg:"$document.page"}

    }
}
])
person Ashwanth Madhav    schedule 15.05.2019