MongoDB lookup操作as字段与首集合同级如何获取预期结果
解决方法
你可以通过$lookup + $concatArrays + $unwind + 字段投影的组合实现预期结果,聚合查询写法如下:
db.collection1.aggregate([ // 可按需添加$match过滤条件,例如筛选nim为1234的记录 { $match: { nim: 1234 } }, // 关联collection2 { $lookup: { from: "collection2", localField: "nim", foreignField: "nim", as: "col2List" } }, // 将当前collection1的文档和关联到的collection2文档合并为一个数组 { $project: { allDocs: { $concatArrays: [ ["$$CURRENT"], "$col2List" ] }, _id: 0 } }, // 拆分数组得到单条文档 { $unwind: "$allDocs" }, // 提取docName字段,移除多余字段 { $replaceRoot: { newRoot: { docName: "$allDocs.docName" } } } ])
补充说明
如果你不需要把两个集合的文档拆分为独立条目,只是希望$lookup返回的字段和原集合字段处于同一层级,可以把$lookup之后的步骤替换为$mergeObjects实现,适合1:1关联的场景:
// $lookup阶段之后添加如下步骤 { $replaceRoot: { newRoot: { $mergeObjects: [ "$$CURRENT", { $first: "$col2List" } ] } } }, // 按需移除多余字段,比如col2List、_id、nim等 { $project: { col2List: 0, _id: 0, nim: 0 } }
内容的提问来源于stack exchange,提问作者prasetya rinaldi
相关产品推荐
相关产品推荐

