Mongoose如何按数组字段元素分组并统计type=4的文档数量
你的现有代码存在两个问题:
- 缺少
$match阶段筛选type为"4"的文档,会统计所有类型的文档数据 - 分组结果默认将分组键存放在
_id字段,没有映射回你需要的countries字段结构
正确的聚合查询写法如下:
const aggregatorOpts = [ // 第一步:筛选符合type条件的文档 { $match: { type: "4" } }, // 第二步:按countries字段分组统计数量 { $group: { _id: "$countries", count: { $sum: 1 } } }, // 第三步:调整输出字段结构,匹配预期格式 { $project: { _id: 0, // 不输出默认的_id字段 countries: "$_id", // 将分组键赋值给countries字段 count: 1 // 保留count字段 } } ] Model.aggregate(aggregatorOpts).exec()
因为你当前场景下每个countries数组仅包含1个元素,直接按整个数组分组可以得到正确结果,如果后续业务迭代中countries可能包含多个元素且需要按第一个国家分组,可以将$group的_id改为{$first: "$countries"}即可。
内容的提问来源于stack exchange,提问作者Abdelghafour Ennahid
相关产品推荐
相关产品推荐

