mongodb中的嵌套条目,仅在子字段的最大值上求和和平均值

Posted

技术标签:

【中文标题】mongodb中的嵌套条目,仅在子字段的最大值上求和和平均值【英文标题】:Nested entry in mongodb, sum and average only over max of a subfield 【发布时间】:2019-10-02 08:13:15 【问题描述】:

我有一个包含文档的数据库,即:

 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】:

试试这个

collection.aggregate([

 "$unwind": 
           path:"$document" ,
           preserveNullAndEmptyArrays:true
      
,

$group:
    _id:"$_id",
    totalPage:$sum:1,
    average:$avg:"$document.page"

    

])

【讨论】:

以上是关于mongodb中的嵌套条目,仅在子字段的最大值上求和和平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何在任意深度查找 MongoDB 字段名称

mongoDb 查找文档中的条目数和按字段区分的条目

MongoDB - 基于嵌套数组的字段值更新数组对象中的字段

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

如何获取集合中的最大字段值?

如何使用 findOne 查询 mongodb 并排除数组中的一些嵌套字段