2017-09-05 6 views
-2

は、私は、次の2つのモデル検索nodejsとMongoDBの内のクエリと人口データ

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

私は名前を検索する場合、これは、 あなたが求めているものを知っているが、あなたのコードは、いくつかのエラーを持っているために、この

+0

検索を.exec()を使用しようとしましたか?私はここに名前に一致しようとしているものは何も見ない。どちらの名前?教師の名前?あなたが求めていることをすべて明確にするわけではありません。 –

+0

先生の名前または件名 – motchezz

答えて

1

ハードを解決するための最良の方法は何であるのは、nullを返しますs。あなたのコードを整理しましょうか?

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

  • あなたは2番目のクエリで.then().catch()のような場所名の

関連する問題