MongoDB查询问题:获取指定用户关注者的帖子
解决获取指定用户关注者帖子的聚合查询问题
原查询的问题分析
你写的聚合管道逻辑完全搞反了:从posts集合出发关联follows,最后匹配post.user等于该作者的关注者,这相当于找“帖子作者自己关注的人等于自己”的帖子,显然不符合需求,自然查不到数据。
正确的聚合实现思路
要获取指定用户关注的人发布的帖子,应该先从follows集合拿到该用户的关注列表,再关联posts筛选对应内容,具体步骤如下:
- 定位目标用户的关注记录:用
$match筛选出指定用户的follows文档 - 拆分关注列表:用
$unwind把followings数组拆成单个用户ID的文档 - 关联帖子集合:用
$lookup关联posts,匹配关注用户ID对应的帖子 - 整理输出结构:拆分关联后的帖子数组,去除冗余字段(可选)
正确的聚合管道代码
假设要查询的指定用户ID是TARGET_USER_ID,管道代码如下:
[ // 匹配目标用户的follow记录 { $match: { user: "TARGET_USER_ID" } }, // 拆分followings数组为单个用户文档 { $unwind: "$followings" }, // 关联posts集合,获取该关注用户的所有帖子 { $lookup: { from: "posts", localField: "followings", foreignField: "user", as: "following_posts" } }, // 拆分帖子数组,让每个帖子单独成为一个文档(可选,根据输出需求调整) { $unwind: "$following_posts" }, // 可选:只保留需要的字段,精简输出 { $project: { _id: 0, post: "$following_posts" } } ]
补充说明
- 如果不需要每个帖子单独成文档,可以去掉最后一个
$unwind,此时输出会是每个关注用户对应其所有帖子的数组 - 确保
TARGET_USER_ID替换为实际的用户ID值,且集合名称(posts、follows)和字段名与你的数据库完全一致
内容的提问来源于stack exchange,提问作者Shivam Soni
相关产品推荐
相关产品推荐

