You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:27:11