首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongodb聚合中生成嵌入式数组的联合

如何在mongodb聚合中生成嵌入式数组的联合
EN

Stack Overflow用户
提问于 2020-07-09 13:56:16
回答 1查看 43关注 0票数 1

我有一组表单文件:

代码语言:javascript
复制
{
    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_recs就可以通过_id组合,所有组合文档的member_ids就可以合并成一个值的联合……

代码语言:javascript
复制
{ _id: 4,
  member_ids: [1, 4, 5, 7, 9]
}

我得到了大部分的方法:

代码语言:javascript
复制
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并不对传递给它的数组进行联合。

相反,它会产生:

代码语言:javascript
复制
{ _id: 4,
  member_ids: [[1, 4, 5], [1, 7, 9]]
}

有没有办法产生这些数组的并集?

EN

回答 1

Stack Overflow用户

发布于 2020-07-09 14:39:43

您已经非常接近了,这里有一个快速示例,说明如何使用$reduce实现这一点

代码语言:javascript
复制
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"
            ]
          }
        }
      }
    }
  }
])

Mongo Playground

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62808332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档