嵌套查询

时间:2017-09-13 20:02:44

标签: node.js mongodb mongoose mongodb-query

好的,这是我的代码:

router.get('/',middleware.isLoggedIn, function(req, res){
  var clave = req.query.id;
  Students.findById(req.params.id).exec(function(err,foundStudent){
    if(err){
      console.log(err);
    }else{
      var estudiante=foundStudent.matriculaT0;
      var modelo=foundStudent.modelo;
      Horarios.find({matricula:estudiante,claveMateria:clave}).exec(function(err,foundHorario){
        if(err){
          console.log(err)
        }else{
          var grupo=foundHorario[0].CRN;
          Grades.find({CRN:grupo}).exec(function(err,foundGrade){
            if(err){
              console.log(err);
            }else{
              var pagina="grade/"+modelo+"/"+clave;  
            res.render(pagina,{horario:foundHorario, student:foundStudent, grade:foundGrade});
}})}})}})});

基本上我使用三种不同的模型,学生,日程表和成绩。因此,为了每个学生首先访问每个科目的成绩,我会找到所选择的学生并获取他的学校ID号(matricula)和它所属的模型(有两个)。

有了这些,我会在学校课程中查看使用" matricula"和" clave" (主题代码"我从请求中得到。一旦我从学生那里得到7个科目,我就会寻找一个特定的主题代码(CRN),这样我就可以在ejs模板中加载它的成绩(每个科目)有一个不同的评分系统......)

所以,一切都很好,页面的渲染和寻找学生和日程安排,唯一的问题是最后一个查询,foundGrade回来时是空的,但是当我在mongo控制台中执行相同的查询时,我得到了正确的结果。

 var grupo=foundHorario[0].CRN

返回正确的结果,字符串形式的主题键,在成绩模型中,主题键(CRN)也是一个字符串。我还确保收集名称是复数,以便不是问题,任何想法?

1 个答案:

答案 0 :(得分:0)

这不是答案,但我认为你可以从这里继续解释/解决你的麻烦!

router.get('/',middleware.isLoggedIn, async (req, res) => {
  try{
       let clave  = req.query.id;

       let foundStudent = await Students.findById(req.params.id);

       let estudiante = foundStudent.matriculaT0;

       let modelo  = foundStudent.modelo;

       let foundHorario = await Horarios.find({
            matricula   :estudiante,
            claveMateria:clave
        });

       let grupo  = foundHorario[0].CRN;

       let foundGrade = await Grades.find({CRN:grupo});

       let pagina="grade/"+modelo+"/"+clave;  

       return res.render(pagina,{
                  horario : foundHorario,
                  student : foundStudent, 
                  grade   : foundGrade
        });

  }catch(err){

       return res.status(400).json(err);

  }
});