Mongoose聚合lookup未按预期填充followers字段问题求助
解决方案
要在聚合查询中填充creatorDoc.followers数组,只需在展开creatorDoc后添加额外的$lookup阶段,将followers的ObjectId关联到users集合对应的完整文档即可。
修改后的聚合查询代码
let postQuery = Post.aggregate([ { $lookup: { from: "users", localField: "creator", foreignField: "_id", as: "creatorDoc", }, }, // 先展开creatorDoc数组为单个对象,提升后续匹配效率 { $unwind: "$creatorDoc" }, { $match: { "creatorDoc.username": username, "creatorDoc.followers": { $nin: [req.user._id] }, }, }, { $project: { _id: 1, caption: 1, "creatorDoc.username": 1, "creatorDoc.followers": 1, }, }, // 新增lookup:将followers数组中的ObjectId替换为完整User文档 { $lookup: { from: "users", localField: "creatorDoc.followers", foreignField: "_id", as: "creatorDoc.followers", }, } ]).then((result) => { console.log(result) res.send(result) })
代码说明
- 先展开
creatorDoc:将第一步$lookup得到的数组展开为单个对象,后续的$match可以直接针对单个对象字段查询,比匹配数组元素效率更高。 - 新增
$lookup填充followers:利用creatorDoc.followers数组中的ObjectId作为关联键,从users集合中查询对应的完整用户文档,并用查询结果覆盖原followers字段。
返回结果示例
[ { "_id": "66294f6765bf3ddfc42f0a9d", "caption": "dedededede", "creatorDoc": { "username": "sam", "followers": [ { "_id": "6626753edc14c52c550834fd", "username": "another_user", "followers": [] } ] } } ]
内容的提问来源于stack exchange,提问作者sam alvis
相关产品推荐
相关产品推荐

