Как получить данные из другой схемы в Nodejs - PullRequest
0 голосов
/ 25 октября 2018

У меня есть две схемы, которые называются сотрудники (родитель) и оценки (ребенок). Каждая оценка будет иметь процент проходного идентификатора сотрудника

, поэтому у меня есть результаты, подобные этому

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 голосов
/ 25 октября 2018
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)
});

2-й способ

// оценивает название вашей модели

      assessments.populate('employee_id').exec(function(err,result){
           console.log(result); 
     });
0 голосов
/ 25 октября 2018

Ниже приведен пример, в котором мы сортируем сотрудников по успешным сборкам.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...