You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:49:09