如何使用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
相关产品推荐
相关产品推荐

