如何在Mongoose单查询中同时获取关注者及自身帖子?
问题原因与解决方案
你之前的查询写法存在逻辑问题:MongoDB的查询文档中,同一个字段重复定义时,后面的条件会直接覆盖前面的。所以你写的{ user: { $in: currentUser.following }, user: currentUser._id }实际上等价于只查询user: currentUser._id,自然只会返回自己的帖子。
下面提供两种可行的解决方式:
方式1:将自身ID加入$in数组
把当前用户的ID追加到关注者ID数组中,让$in同时匹配关注者和自己:
// 复制原数组避免修改原始数据,再添加自身ID const targetIds = [...currentUser.following, currentUser._id]; let followingUsersPost = await Post.find({ user: { $in: targetIds } }) .populate('user', '_id name username') .sort({ createdAt: -1 });
方式2:使用$or操作符
通过$or定义两个并行查询条件,分别匹配关注者帖子和自身帖子:
let followingUsersPost = await Post.find({ $or: [ { user: { $in: currentUser.following } }, { user: currentUser._id } ] }) .populate('user', '_id name username') .sort({ createdAt: -1 });
两种方式都能实现需求,方式1更简洁高效,适合这种简单的集合合并场景;方式2扩展性更强,后续如果需要添加其他查询条件可以直接在$or数组中追加。
内容的提问来源于stack exchange,提问作者folov55205
相关产品推荐
相关产品推荐

