【问题标题】:Empty moongose result in nested query空猫鼬导致嵌套查询
【发布时间】:2017-09-14 07:07:29
【问题描述】:

好的,这是我的代码:

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) 也是一个字符串。我还确保集合名称是复数形式,所以这也不是问题,有什么想法吗?

【问题讨论】:

  • 伟大的 cb 地狱 }); }})}})}})});

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

这不是答案,但我认为您可以从这里继续解释/解决您的问题!

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

  }
});

【讨论】:

  • 谢谢!我对 node 还很陌生,而且我以前从未使用过异步函数,所以我真的很感激。
  • 是的,您一直使用异步函数,但没有使用异步/等待范例!
猜你喜欢
  • 2021-03-23
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2019-04-06
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多