如何从Node.js中的不同架构获取数据

时间:2018-10-25 09:35:39

标签: node.js mongodb express

我有两个模式,分别称为雇员(父母)和评估(孩子) 每次评估都将通过员工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
  }
]

所以我想根据合格的评估结果对员工进行评估

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

2 个答案:

答案 0 :(得分:0)

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

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);

答案 1 :(得分:0)

you can do 2 things join with $look up or populate with employee id

assessments.aggregate([
        {
            '$lookup': {
                'from': 'employees',
                'localField': 'employee_id',
                'foreignField': '_id',
                'as': 'datas'
            }
        },
     { "$unwind": "$datas" },


].exec(function(err,result){
   console.log(result)
});

第二种方式

//评估您的型号名称

      assessments.populate('employee_id').exec(function(err,result){
           console.log(result); 
     });