首页 > 解决方案 > 如何从 Nodejs 中的不同模式获取数据

问题描述

我有两个模式,称为员工(父)和评估(子)每个评估都会有一个通过百分比的员工 ID

所以我有这样的结果

employees : [
  {
    "_id": 12345,
    "name": "David",
    "evaluated": false
  },
  {
    "_id": 12346,
    "name": "Miller",
    "evaluated": false
  }
]

第二个模式

assessments: [
  {
    "assessment_type": "basic",
    "employee_id": 12345,
    "qualified": true
  },
  {
    "assessment_type": "advanced",
    "employee_id": 12345,
    "qualified": false
  },
  {
    "assessment_type": "basic",
    "employee_id": 12346,
    "qualified": true
  },
  {
    "assessment_type": "advanced",
    "employee_id": 12346,
    "qualified": true
  }
]

所以我想让员工根据评估合格是真的

你能告诉我什么是最好的方法吗?

标签: node.jsmongodbexpress

解决方案


这是一个示例,我们按员工成功的评估对员工进行排序。

const employees = [{
  _id: 12345,
  name: 'David',
  evaluated: false,
}, {
  _id: 12346,
  name: 'Miller',
  evaluated: false,
}];

const assessments = [{
  assessment_type: 'basic',
  employee_id: 12345,
  qualified: true,
}, {
  assessment_type: 'advanced',
  employee_id: 12345,
  qualified: false,
}, {
  assessment_type: 'basic',
  employee_id: 12346,
  qualified: true,
}, {
  assessment_type: 'advanced',
  employee_id: 12346,
  qualified: true,
}];

// Loop at the employees
const sortByAssessment = employees.reduce((tmp, x) => {
  // Get all the assessment about the employee
  const employeeAssessment = assessments.filter(y => y.employee_id === x._id);
  
  // Deal with each assessment
  employeeAssessment.forEach((y) => {
    // Only do something about successfull assessments
    if (y.qualified) {
      // In case this is the first time we are dealing with the assessment_type
      // create an array where we are going to insert employees informations
      tmp[y.assessment_type] = tmp[y.assessment_type] || [];
      
      // Push the name of the employee inside of the assessment type array
      tmp[y.assessment_type].push(x.name);
    }
  });
  
  return tmp;
}, {});

console.log(sortByAssessment);


推荐阅读