首页 > 解决方案 > 将嵌套数组的嵌套数组的所有元素重新组合成一个数组

问题描述

我有这个系列:

{
  "_id": ObjectId("6045eec8f113547ddd3472d9"),
  "execution": {
    "_id": ObjectId("6045eec8f113547ddd3472d8"),
    "steps": [
      {
        "_id": ObjectId("6045eec8f113547ddd3472d7"),
        "actions": [
          {
            "_id": ObjectId("6045eec8f113547ddd3472d6"),
            "title": "action title"
          }
        ]
      }
    ]
  }
}

我想达到这个结果:

{
  "_id": ObjectId("6045eec8f113547ddd3472d9"),
  "allActions": [
    {
      "_id": ObjectId("6045eec8f113547ddd3472d6"),
      "title": "action title"
    }
  ]
}

为了澄清更多,我想添加一个数组,将“步骤”数组下的所有“动作”组合在一起

db.getCollection("missions").aggregate([
    {
        $match: {
            _id: ObjectId("6045eec8f113547ddd3472d9")
        }
    },
    {
        $addFields: {
            "allActions": "$execution.steps"
        }
    }
])

有人可以帮我完成可以让我实现所需输出的代码部分吗?

标签: mongodbmongodb-queryaggregation-framework

解决方案


您可以只使用$reduceand$concatArraysactions数组中的所有条目进行分组

db.missions.aggregate([
  {
    $match: {
      _id: ObjectId("6045eec8f113547ddd3472d9")
    }
  },
  {
    $addFields: {
      "allActions": {
        "$reduce": {
          "input": "$execution.steps.actions",
          "initialValue": [],
          "in": {
            "$concatArrays": [
              "$$value",
              "$$this"
            ]
          }
        }
      }
    }
  }
])

这是Mongo游乐场供您参考。


推荐阅读