MongoDB聚合查询:如何按正则匹配name字段对vacancy集合分组统计?
MongoDB聚合查询:指定单词分组统计
需求背景
现有vacancy集合,文档结构示例如下:
[ { "name": "Software Developer", "published_at": "2022-08-31" }, { "name": "Tech Lead", "published_at": "2022-08-31" }, { "name": "Team Lead", "published_at": "2022-08-31" }, { "name": "Software Engineer", "published_at": "2022-08-31" } ]
需要编写聚合查询,通过正则验证name字段中"Software"和"Lead"的存在,返回如下分组统计结果:
[ { "_id": "Software", "count": 2 }, { "_id": "Lead", "count": 2 } ]
聚合查询实现
db.vacancy.aggregate([ // 拆分name字段为单词数组 { $addFields: { words: { $split: ["$name", " "] } } }, // 将数组拆分为单个单词的独立文档 { $unwind: "$words" }, // 筛选出匹配目标单词的文档(正则精确匹配) { $match: { words: { $in: [/^Software$/, /^Lead$/] } } }, // 按单词分组统计出现次数 { $group: { _id: "$words", count: { $sum: 1 } } } ])
逻辑说明
- $addFields + $split:将
name字段按空格分割为单词数组,新增words字段存储该数组。 - $unwind:把数组拆分成单个单词的文档,确保每个单词能单独被统计。
- $match:用正则精确匹配"Software"和"Lead",过滤掉无关单词的文档。
- $group:以匹配到的单词为分组键,统计每个单词的出现次数。
内容的提问来源于stack exchange,提问作者Pedro Hamzeh
相关产品推荐
相关产品推荐

