Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mongodb聚合中生成嵌入式数组的并集_Mongodb_Aggregation Framework - Fatal编程技术网

如何在mongodb聚合中生成嵌入式数组的并集

如何在mongodb聚合中生成嵌入式数组的并集,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一套以下格式的文件: { skill_id: 2, skill_recs: [ { _id: 4, member_ids: [1, 4, 5] } ] }, { skill_id: 5, skill_recs: [ { _id: 4, member_ids: [1, 7, 9] } ]

我有一套以下格式的文件:

{
    skill_id: 2,
    skill_recs: [
        {
            _id: 4,
            member_ids: [1, 4, 5]
        }
    ]
},
{
    skill_id: 5,
    skill_recs: [
        {
            _id: 4,
            member_ids: [1, 7, 9]
        }
    ]
}
现在我想聚合一组这些文档,这样技能记录由_id合并,所有合并文档的成员id合并成一个值的联合体

{ _id: 4,
  member_ids: [1, 4, 5, 7, 9]
}
我主要通过以下方式获得:

db.aggregate([
    {
        $unwind: '$skill_recs'
    },
    {
        $group: {
            _id: '$skill_recs._id',
            all_member_ids: {$push: '$skill_recs.member_ids'}
        }
    },
    {
        $addFields: {
            member_ids: {$setUnion: '$all_member_ids'}
        }
    }
])
但是,
$setUnion
不会对所传递的数组进行并集

相反,它产生:

{ _id: 4,
  member_ids: [[1, 4, 5], [1, 7, 9]]
}

有什么方法可以产生这些数组的并集吗?

您已经非常接近了,下面是一个如何使用


您需要使用
$reduce
将阵列展平,如下所示:非常好。如果我只想合并数组而不是集合联合,我是否需要
$reduce
?试着把我的头绕在
“$$this”和“$$value”对上。回答我自己的问题<代码>$concatArray
执行此任务。非常非常好。非常感谢。
db.collection.aggregate([
  {
    $unwind: "$skill_recs"
  },
  {
    $group: {
      _id: "$skill_recs._id",
      all_member_ids: {
        $push: "$skill_recs.member_ids"
      }
    }
  },
  {
    $addFields: {
      member_ids: {
        $reduce: {
          input: "$all_member_ids",
          initialValue: [],
          in: {
            $setUnion: [
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])