MongoDB聚合查询:如何判断特定用户是否点赞帖子
解决方案:判断特定用户是否点赞MongoDB帖子
你的代码存在两处问题:
userlikes是直接存储用户ObjectId的数组,并非包含userid字段的对象数组,因此$userlikes.userid的写法不成立,直接引用$userlikes即可。- 你用
$sum统计符合条件的数量,但需求只是判断用户是否点赞(返回true/false),无需求和,用$in操作符就能直接实现判断逻辑。
方法一:直接用$in返回布尔值
这是最简洁的实现方式:
const targetUserId = mongoose.Types.ObjectId('64b4717b9c74dbff21f51e0e'); const posts = await Post.aggregate([ { $project: { title: 1, userlikecnt: { $size: "$userlikes" }, userlikedthisPost: { $in: [targetUserId, "$userlikes"] } } } ]);
方法二:用$cond结合$in(需扩展逻辑时使用)
如果后续需要调整返回值或添加额外判断逻辑,可以用$cond包裹:
const targetUserId = mongoose.Types.ObjectId('64b4717b9c74dbff21f51e0e'); const posts = await Post.aggregate([ { $project: { title: 1, userlikecnt: { $size: "$userlikes" }, userlikedthisPost: { $cond: { if: { $in: [targetUserId, "$userlikes"] }, then: true, else: false } } } } ]);
说明:$in操作符会直接检查目标用户ID是否存在于userlikes数组中,返回结果正好是你需要的布尔值;把目标ID提取到变量中,也让代码更易维护。
内容的提问来源于stack exchange,提问作者D. Rattansingh
相关产品推荐
相关产品推荐

