在mongodb中搜索是否包含表单值



这是我的猫鼬模型:

{
    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">

我为搜索写的Mongoose查询:

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

现在的问题是,当get请求中缺少/省略了任何一个或多个字段时,该查询就不起作用了。我需要一个猫鼬查询。

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

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

最新更新