首页 > 解决方案 > 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

标签: pythonmongodbnosqlpymongonosql-aggregation

解决方案


试试这个

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

    }
}
])

推荐阅读