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

Mongoose聚合lookup未按预期填充followers字段问题求助

解决方案

要在聚合查询中填充creatorDoc.followers数组,只需在展开creatorDoc后添加额外的$lookup阶段,将followers的ObjectId关联到users集合对应的完整文档即可。

修改后的聚合查询代码

let postQuery = Post.aggregate([
    {
        $lookup: {
            from: "users",
            localField: "creator",
            foreignField: "_id",
            as: "creatorDoc",
        },
    },
    // 先展开creatorDoc数组为单个对象,提升后续匹配效率
    { $unwind: "$creatorDoc" },
    {
        $match: {
            "creatorDoc.username": username,
            "creatorDoc.followers": { $nin: [req.user._id] },
        },
    },
    {
        $project: {
            _id: 1,
            caption: 1,
            "creatorDoc.username": 1,
            "creatorDoc.followers": 1,
        },
    },
    // 新增lookup:将followers数组中的ObjectId替换为完整User文档
    {
        $lookup: {
            from: "users",
            localField: "creatorDoc.followers",
            foreignField: "_id",
            as: "creatorDoc.followers",
        },
    }
]).then((result) => {
    console.log(result)
    res.send(result)
})

代码说明

  1. 先展开creatorDoc:将第一步$lookup得到的数组展开为单个对象,后续的$match可以直接针对单个对象字段查询,比匹配数组元素效率更高。
  2. 新增$lookup填充followers:利用creatorDoc.followers数组中的ObjectId作为关联键,从users集合中查询对应的完整用户文档,并用查询结果覆盖原followers字段。

返回结果示例

[
  {
    "_id": "66294f6765bf3ddfc42f0a9d",
    "caption": "dedededede",
    "creatorDoc": {
      "username": "sam",
      "followers": [
        {
          "_id": "6626753edc14c52c550834fd",
          "username": "another_user",
          "followers": []
        }
      ]
    }
  }
]

内容的提问来源于stack exchange,提问作者sam alvis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:31