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

如何在Mongoose中从Product模型/路由获取关联Product的用户列表或数量

解答

完全可以从Product模型侧完成这个需求,不需要依赖User侧的逻辑,以下是两种常见场景的实现方案:

  • 仅需要获取关联过商品的用户ID列表/统计数量
    直接调用Mongoose的distinct方法即可,该方法会自动对指定字段去重,返回所有不重复的关联用户ID:

    // 获取所有关联过商品的用户ID数组
    const relatedUserIds = await Product.distinct('user')
    // 直接得到关联用户数量
    const relatedUserCount = relatedUserIds.length
    

    该方法性能较高,适合只需要ID或者仅做数量统计的场景。

  • 需要获取关联用户的完整文档信息
    可以使用Mongoose聚合管道,先对用户ID去重,再关联User表拉取完整用户数据:

    const relatedUsers = await Product.aggregate([
      // 按user字段分组去重,得到所有关联过商品的用户ID
      {
        $group: {
          _id: '$user'
        }
      },
      // 关联User集合拉取用户完整信息
      {
        $lookup: {
          from: 'users', // 此处为User模型对应的MongoDB集合名,默认是模型名小写加s
          localField: '_id',
          foreignField: '_id',
          as: 'userInfo'
        }
      },
      // 拆分数组,同时自动过滤掉已删除、关联不到的无效用户
      {
        $unwind: '$userInfo'
      },
      // 调整返回结构,直接返回用户数据
      {
        $replaceRoot: { newRoot: '$userInfo' }
      }
    ])
    // 统计关联有效用户数量直接取 relatedUsers.length 即可
    

注意:如果你的业务存在用户删除但关联商品未同步删除的情况,第一种方案返回的ID列表会包含已删除用户的无效ID,需要过滤无效用户的话推荐使用第二种方案。

内容的提问来源于stack exchange,提问作者john otor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:04