我有一个 Mongoose 工作模型,每个工作都有一个美国州。我试图做一个查询,这将给予我在每个州的工作数量。目标将是填充美国就业热图。
我的模型看起来像这样:
const JobSchema = new Schema({
state: {
type: String,
required: true
},
status: {
type: String,
enum: ['Available', 'Accepted', 'Closed'],
default: 'Available'
}
}, { versionKey: false, timestamps: true });
字符串
我所寻找的结果将给我给予接近于:
{
docs: [
{
state: 'FL',
count: 27
},
{
state: 'NC',
count: 41
}
]
}
型
我已经修补了迭代if $distinct和其他,但没有运气。任何帮助将不胜感激。
2条答案
按热度按时间30byixjq1#
你需要创建一个如下的聚合:
字符串
此聚合按状态对数据进行分组,计数使用**$sum**运算符,并为每个文档添加一个。
w3nuxt5m2#
Armin上面的回答为解决这个问题提供了正确的途径。感谢Mongo Atlas在他们的界面中包含了聚合,这帮助我理解了聚合中的
stages
。对于我上面的问题,还有一个额外的复杂性值得在这里为下一个学习聚合的人注意。我正在构建的系统是多租户的,因此作业属于一个组织-并且有许多组织,每个组织都有许多作业。我希望我的查询能够获取属于单个组织的作业的计数。
我的聚合查询结果是:
字符串
请注意,agg查询是一个数组。数组中的每个项目都是
stage
,在流程顺序中,stage是step
-在这种情况下很重要。第1步(aggConfig[0])将结果集隔离为仅属于特定组织的作业。第2步(aggConfig[1])按状态执行作业求和,返回所需的数据数组。使用Mongoose模型执行:
型