MongoDB中查询嵌套数组对象内的重复字段记录并统计重复次数
统计重复分类记录的实现方案
看起来你需要从给定的员工集合数据中,找出重复出现的分类记录并按指定格式输出,我来给你一个具体的JavaScript实现方案:
原始数据
const employeeData = [ { "Empname": "Doug", "Group": [ { "Category": [ { "Categoryid": 123, "Categoryname": "science" }, { "Categoryid": 233, "Categoryname": "Maths" } ] } ] }, { "Empname": "stark", "Group": [ { "Category": [ { "Categoryid": 123, "Categoryname": "science" }, { "Categoryid": 144, "Categoryname": "language " } ] } ] } ];
实现步骤与代码
核心思路
- 逐层遍历嵌套的数据结构,提取每一条分类记录
- 用分类ID+分类名称作为唯一标识,统计每个分类的出现次数
- 筛选出出现次数大于1的分类,转换为你需要的输出格式
完整代码实现
// 初始化统计对象,用于记录每个分类的出现次数 const categoryCount = {}; // 逐层遍历数据:员工 → Group → Category employeeData.forEach(employee => { employee.Group.forEach(group => { group.Category.forEach(category => { // 生成唯一键(去除名称前后空格,避免空格导致的误判) const uniqueKey = `${category.Categoryid}-${category.Categoryname.trim()}`; // 更新计数,不存在则初始化为1 categoryCount[uniqueKey] = (categoryCount[uniqueKey] || 0) + 1; }); }); }); // 转换为目标格式并筛选重复项 const duplicateCategories = Object.entries(categoryCount) .filter(([key, count]) => count > 1) .map(([key, count]) => { const [_, categoryName] = key.split('-'); return { categoryname: categoryName, count: count }; }); console.log(duplicateCategories); // 输出结果:[{"categoryname":"science","count":2}]
细节说明
- 使用
Categoryid+Categoryname作为唯一键,确保只有ID和名称完全匹配的记录才会被视为同一分类 - 加入
trim()处理分类名称,避免因前后空格导致的统计错误(比如示例中的language带空格) - 最终结果只保留出现次数大于1的分类,完全符合你的需求
内容的提问来源于stack exchange,提问作者Franklin
相关产品推荐
相关产品推荐

