MongoDB lookup关联时如何按指定字段筛选填充对应likes文档?
你可以使用带pipeline参数的$lookup来增加额外的过滤条件,修改后的查询语句如下,注意将语句中的<前端传入的用户ObjectId>替换为实际从前端拿到的参数,且需要先转为MongoDB的ObjectId类型:
// 先定义前端传入的用户ID,注意转ObjectId const targetUserId = ObjectId("<前端传入的用户_id>"); db.users.aggregate([ { $lookup: { from: "universities", localField: "university", foreignField: "_id", as: "university", }, }, { $lookup: { from: "likes", // 定义当前文档可传入关联pipeline的变量 let: { likedIdList: "$business_idea.likedByList" }, pipeline: [ { $match: { $expr: { $in: ["$_id", "$$likedIdList"] }, // 新增过滤条件:createdBy匹配指定用户ID createdBy: targetUserId, isDeleted: false // 可选:过滤已删除的点赞记录 } } ], as: "liked" } }, { $match: { "business_idea.isDeleted": false } }, { $project: { ideaList: "$business_idea", university: "$university.type", likeditem: "$liked" } }, { $unwind: "$ideaList" } ])
修改说明
- 替换了原来的普通
$lookup,通过let参数将当前用户文档的business_idea.likedByList定义为关联查询时可访问的变量 - 在关联的
pipeline中新增了两层匹配规则:首先匹配点赞记录的_id存在于likedByList中,其次匹配点赞记录的createdBy和前端传入的_id一致,确保只返回符合要求的关联点赞数据 - 可根据需要自行添加
isDeleted: false等额外的点赞记录过滤条件
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

