【问题标题】:Find sum of status in nested array of document in mongodb在 mongodb 文档的嵌套数组中查找状态总和
【发布时间】:2019-03-24 04:25:06
【问题描述】:

在下面的文档结构中,我需要找到数组“X”中的元素总数和“X”中状态“a”的总数。

 [
      {
        X: [
          {
            Y: [
              {
                STATUS: "a"
              },
              {
                STATUS: "b"
              },
              {
                STATUS: "c"
              }
            ]
          },
          {
            Y: [
              {
                STATUS: "a"
              },
              {
                STATUS: "b"
              },
              {
                STATUS: "c"
              }
            ]
          }
        ]
      }
    ]

这里需要的结果是“X”中的元素总数为 2,“X”中状态“a”的总数为 2。

已尝试但无法在单个查询中获得准确的数据。

【问题讨论】:

    标签: mongodb mongoose aggregation-framework


    【解决方案1】:

    您需要$size 来获取数组的长度,并需要$filter 来应用STATUS a 条件。然后您可以使用$reduce 简单地将所有a 求和为X 数组。试试:

    db.collection.aggregate([
        {
            $project: {
                total_a: { 
                    $reduce: {
                        input: "$X",
                        initialValue: 0,
                        in: {
                            $add: [ "$$value", 
                                { $size: { $filter: { input: "$$this.Y", as: "yy", cond: { $eq: [ "$$yy.STATUS", "a" ] } } } } 
                            ]
                        }
                    }
                },
                total_X: { $size: "$X" }
            }
        }
    ])
    

    游乐场here

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 2016-07-01
      • 2023-03-05
      • 2019-10-09
      • 2018-03-09
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多