Mongoose使用aggregate lookup后将两集合数据合并为单个对象的实现问题
MongoDB跨集合关联聚合实现方案
你要的效果可以直接用MongoDB原生的$lookup聚合阶段实现,这是专门用来做多集合左外关联的操作符,具体实现代码如下:
// 注意把代码里的「集合A名称」「集合B名称」替换为你实际的集合名 db.getCollection("集合A名称").aggregate([ { $lookup: { from: "集合B名称", // 关联的目标集合B localField: "id", // 集合A用来关联的字段 foreignField: "colA_id", // 集合B用来和A关联的对应字段 as: "list_of_b" // 关联后存放B集合匹配数据的字段名 } }, // 可选配置:如果不需要返回没有匹配到B数据的A文档,加上下面的过滤阶段 { $match: { list_of_b: { $ne: [] } } } ])
单条返回问题排查
如果你每次查询只能返回一条记录,优先检查三个点:
- 聚合管道末尾是否误加了
$limit: 1的限制阶段 - 是否提前加了针对
id的$match过滤条件,只筛选了特定的A集合文档 - 查询结果获取时是否调用了
next()、first()这类只返回单条数据的方法
按照上面的语句执行后,你示例中的id=2的A集合文档会返回你要求的格式,id=4的A文档如果没有加可选过滤条件的话会返回空的list_of_b数组。
内容的提问来源于stack exchange,提问作者hexoyin10
相关产品推荐
相关产品推荐

