2017-09-05 83 views
-2

我有一个是写在的NodeJS和MongoDB一个web应用程序,我有以下两种模式搜索查询和填充的数据

var TeacherSchema = new Schema({ 
     school_id:[{type: Schema.Types.ObjectId, ref: 'School'}], 
     name: String, 
     subjects: [{type: Schema.Types.ObjectId, ref: 'Subject'}], 
     }); 


var SubjectSchema = new Schema({ 
    title : String, 
    school_id:[{type: Schema.Types.ObjectId, ref: 'School'}] 
    }); 

我写的搜索抛出教师或学科

的API
router.get("/field-teacher-subject", function (req, res) { 
var school_id= req.query.schoolId; 
Subject.find(school_id:'school_id,function (err, subjects) { 
    if (err) { 
     console.log(err); 
     res.json({status: "error", message: err.message}); 
    } else { 
     var sub_array=[]; 
     for(var q in subjects){ 
      sub_array.push(subjects[q]._id); 
     } 
     Teacher.find({subjects:{$in :sub_array }},{first_name:true, father_name:true, last_name : true, subjects:true}).populate('subjects') 
      .exec(function(tech) { 
       console.log("hello: "); 
       var subjeto = []; 
       if(tech){ 
        for(var p in tech){ 
         subjeto.push(tech[p].subjects); 
        } 
       } 
       res.json({status: "success", message: "subjects returned", 
      items: tech}); 
      }).catch(function(err){ 
       if(err){ 
        res.json({status:"error", 
         message:"error occurred"+err.message}); 
        return; 
       } 
      }); 
    } 
}).limit(parseInt(req.query.max)); 
}); 

当我搜索一个名字返回null, 什么是解决这一

+0

搜索一个名字在哪里?我在这里没有看到任何与名字匹配的东西。哪个名字?老师的名字?不是很清楚你在问什么。 –

+0

教师姓名或科目名称 – motchezz

回答

1

很难知道你问什么是最好的方式,但你的代码有几个错误秒。我们来清理你的代码吧?

router.get("/field-teacher-subject", function (req, res) { 
    // get subjects 
    Subject 
     .find({ school_id: req.query.schoolId }) // 1st argument is an object 
     .limit(parseInt(req.query.max))    // should go before 
     .exec(function (err, subjects) {   // use .exec() 
      if (err) { 
       console.log(err); 
       return res.json({ status: "error", message: err.message }); 
      } 
      // get subject IDs 
      var sub_array = subjects.map(function (subject) { return subject._id; }); 
      // get teachers assigned to subjects 
      Teacher 
       .find({ subjects: { $in: sub_array }}) 
       .select('first_name father_name last_name subjects') 
       .populate('subjects') 
       .exec(function(err, teachers) {  // 1st argument is an error 
        if (err) { 
         console.log(err); 
         return res.json({status: "error", message: err.message }); 
        } 
        var subjeto = teachers.map(function (teacher) { return teacher.subjects; }); 

        res.json({status: "success", message: "subjects returned", items: teachers }); 
       }); 
    }); 
}); 

相关链接:

  • 参见如何使用.limit().exec()doc第三个例子。

  • .map()

  • 您尝试使用.exec().then().catch()在你的第二个查询