如何用Mongoose按美国州统计Job文档数量?
按美国州统计职位数量的Mongoose聚合查询方案
要实现按州统计职位数量的需求,你需要使用MongoDB的聚合管道来分组并计数,这比$distinct更适合这类统计场景。以下是直接可用的代码实现:
核心查询代码
const Job = mongoose.model('Job', JobSchema); Job.aggregate([ // 可选:如果需要仅统计特定状态的职位,取消下方注释并修改条件 // { $match: { status: { $in: ['Available', 'Accepted'] } } }, { $group: { _id: '$state', // 按state字段分组 count: { $sum: 1 } // 统计每组的职位数量 } }, { $project: { _id: 0, // 隐藏默认生成的_id字段 state: '$_id', // 将分组的_id重命名为state count: 1 // 保留count字段 } }, { $sort: { count: -1 } } // 可选:按数量降序排列结果 ]) .then(aggregatedResult => { // 包装成你期望的输出格式 const finalResult = { docs: aggregatedResult }; console.log(finalResult); }) .catch(error => { console.error('统计查询失败:', error); });
代码说明
- $match(可选):用于过滤需要统计的职位,比如只统计
Available状态的职位,或者排除Closed状态的,可根据业务需求灵活调整过滤条件。 - $group:这是统计的核心步骤,通过
_id: '$state'将数据按州分组,$sum:1对每组的文档数量进行累加计数。 - $project:调整输出字段结构,把分组时生成的
_id(即州代码)重命名为state,同时隐藏原_id字段,让结果结构完全匹配你的期望。 - $sort(可选):对结果按计数降序排列,方便直观查看职位数量多的州。
为什么$distinct不适用?
$distinct只能返回去重后的州代码数组,无法直接关联每个州对应的职位数量,因此无法满足你的统计需求,聚合管道才是这类分组统计场景的正确选择。
内容的提问来源于stack exchange,提问作者Brant
相关产品推荐
相关产品推荐

