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

如何使用MongoDB/Mongoose聚合统计关联用户amputationInfo各枚举值数量

你可以在现有聚合阶段的基础上新增3个阶段实现需求,完整的聚合管道如下:

[
  {
    '$match': {
      'prosthetistID': new ObjectId('6126ca6148f34c00189f86f5')
    }
  }, 
  {
    '$lookup': {
      'from': 'users', 
      'localField': 'user', 
      'foreignField': '_id', 
      'as': 'userInfo'
    }
  }, 
  {
    '$unwind': {
      'path': '$userInfo'
    }
  },
  // 新增1:按用户ID去重,避免同一用户发多条评论被重复统计
  {
    '$group': {
      '_id': '$userInfo._id',
      'amputationInfo': { '$first': '$userInfo.amputationInfo' }
    }
  },
  // 新增2:全局统计两个维度的用户数
  {
    '$group': {
      '_id': null,
      'doubleSymesBoyd': {
        '$sum': {
          '$cond': [ { '$in': ['Double Symes/Boyd', '$amputationInfo'] }, 1, 0 ]
        }
      },
      'singleAboveElbow': {
        '$sum': {
          '$cond': [ { '$in': ['Single Above-Elbow', '$amputationInfo'] }, 1, 0 ]
        }
      }
    }
  },
  // 新增3:移除返回结果中的_id字段,匹配你的期望输出格式
  {
    '$project': {
      '_id': 0,
      'doubleSymesBoyd': 1,
      'singleAboveElbow': 1
    }
  }
]

逻辑说明

  • 第一个新增的$group阶段:以用户ID作为分组主键,确保每个用户仅保留一条记录,避免同一用户发布多条评论导致重复统计。
  • 第二个新增的$group阶段:使用$in判断当前用户的amputationInfo数组是否包含目标值,结合$cond条件判断对符合要求的用户计数累加。
  • 最后$project阶段:过滤不需要的_id字段,输出和你预期完全一致的结构。

如果你的业务需求是统计对应评论的记录数(不需要按用户去重),直接删除第一个新增的$group阶段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:12:03