我有一组表单文件:
{
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就可以合并成一个值的联合……
{ _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]]
}有没有办法产生这些数组的并集?
发布于 2020-07-09 14:39:43
您已经非常接近了,这里有一个快速示例,说明如何使用$reduce实现这一点
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"
]
}
}
}
}
}
])https://stackoverflow.com/questions/62808332
复制相似问题