【问题标题】:MongoDB Aggregation: How to group in array value?MongoDB 聚合:如何对数组值进行分组?
【发布时间】:2023-01-20 11:43:08
【问题描述】:

例如,文档。

[
  {
    "username": "joy",
    "size_info": [
      {
        "size": "M",
        "width": 100,
        "height": 102
      },
      {
        "size": "M",
        "width": 102,
        "height": 104
      },
      {
        "size": "S",
        "width": 80,
        "height": 82
      }
    ]
  }
]

我想将size_info.size 分组并推送具有宽度和高度的数组。

我正在尝试创建聚合查询。 例如,对于上面给定的文件,它看起来像下面这样:

[
  {
    "username": "joy",
    "size_info": [
      {
        "size": "M",
        "actual_size": [
          {
            "width": 100,
            "height": 102
          },
          {
            "width": 102,
            "height": 104
          }
        ]
      },
      {
        "size": "S",
        "actual_size": [
          {
            "width": 80,
            "height": 82
          }
        ]
      }
    ]
  }
]

是否可以? 谢谢你的帮忙。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:
    1. $unwind - 将size_info 数组解构为多个文档。

    2. $group - 按username 和size_info.size 分组。将文档添加到actual_size 数组中。

    3. $group - 按username 分组。将文档添加到size_info 数组中。

    4. $project - 修饰输出文档。

      db.collection.aggregate([
        {
          $unwind: "$size_info"
        },
        {
          $group: {
            _id: {
              username: "$username",
              size: "$size_info.size"
            },
            actual_size: {
              $push: {
                width: "$size_info.width",
                height: "$size_info.height"
              }
            }
          }
        },
        {
          $group: {
            _id: "$_id.username",
            size_info: {
              $push: {
                size: "$_id.size",
                actual_size: "$actual_size"
              }
            }
          }
        },
        {
          $project: {
            _id: 0,
            username: "$_id",
            size_info: 1
          }
        }
      ])
      

      Sample Mongo Playground

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2020-06-29
      • 2021-04-18
      • 2016-07-03
      • 1970-01-01
      • 2019-05-19
      • 2019-01-31
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多