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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:15:03