2016-04-19 50 views
0

这里是我的猫鼬模型:搜索值

{ 
    id : Schema.ObjectId, 
    subjectCode: String, 
    part: String, 
    paper : [{ 
     year: Number, 
     month: String 
    }], 
    question: String, 
    questionNumber: String, 
    marks: Number 
} 

我想要使用此模型的高级搜索。 搜索表单具有这些html输入字段。

<input type="text" name="subjectCode"> 
<input type="text" name="part"> 
<select name="year" multiple> 
    <option value="">Any</option> 
    <option value="2011">2011</option> 
    <option value="2012">2012</option> 
    <option value="2013">2013</option> 
</select> 
<select name="month" multiple> 
    <option value="">Any</option> 
    <option value="JAN">JAN</option> 
    <option value="FEB">FEB</option> 
    <option value="MAR">MAR</option> 
</select> 
<input type="text" name="question"> 
<input type="text" name="questionNumber"> 
<input type="text" name="marks"> 

猫鼬查询我写的搜索:

Question.find({ 
    subjectCode: req.query.subjectName, 
    'paper.year': req.query.year, 
    'paper.month': req.query.month, 
    part: req.query.questionPart, 
    questionNumber: req.query.questionsNumber}, function(err, question){ 
     if(err){ 
      return next(err); 
     } 
     else{ 
      res.json(question); 
     } 
}); 

现在的问题是,任何一个或多个字段丢失时/获取请求省略,这个查询是行不通的。 我需要一个猫鼬查询。

回答

1

可以有条件地设置查询条件,如:

var conditions = {}; 
if(req.query.subjectName !== undefined) conditions.subjectCode = req.query.subjectName; 
.... 
Question.find(conditions, function(err, question){...}); 
+0

感谢汉克。 几乎可以解决所有问题。 – Shajan

+0

你可以接受将会感激的答案。 :) –