Вложенная запись в mongodb, сумма и среднее только по максимуму подполя - PullRequest
0 голосов
/ 15 мая 2019

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

{ 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

1 Ответ

0 голосов
/ 15 мая 2019

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

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

    }
}
])
...