MongoDB如何用aggregation为group集合每条记录添加关联用户id列表
MongoDB聚合查询实现方案
完整聚合语句
直接在groups集合上执行如下聚合管道即可得到预期结果:
db.groups.aggregate([ // 关联users集合匹配当前组对应的用户 { $lookup: { from: "users", localField: "id", foreignField: "groups", as: "relatedUsers" } }, // 提取用户id生成assignedTo字段,无匹配用户时自动为空数组 { $addFields: { assignedTo: "$relatedUsers.id" } }, // 移除临时关联字段 { $unset: "relatedUsers" } ])
执行逻辑说明
$lookup阶段默认支持匹配数组类型的外键,会自动筛选users集合中groups数组包含当前组id的所有用户,存入临时字段relatedUsers- 直接取
relatedUsers.id即可得到所有关联用户的id数组,无匹配用户时relatedUsers为空数组,对应assignedTo自动为空数组,无需额外做空值处理 - 最后移除不需要的临时关联字段即可得到完全符合要求的返回结构
内容的提问来源于stack exchange,提问作者Alexey Sirenko
相关产品推荐
相关产品推荐

