查询使用mongoose中的正则表达式搜索对象数组

时间:2016-05-16 02:08:15

标签: javascript node.js mongodb

我的架构如下:

var QuestionListSchema = newSchema({
    topics: [{
        _id: false,
        topicID: Number,
        topicName: String,
        quesList: [{
            quesListID: Number,
            quesListName: String,
            _id: false,
            by: String,
            questions: [{
                questionId: Number,
                _id: false,
                question: String
            }]
        }]
    }]
});

现在我有一个搜索框,通过将输入发送到服务器(ajax),我正在进行node.js调用的每个输入。

所以这是我为此操作编写的查询:

exports.search = function(req, res) {
    console.log(req.query.quesListName);
    QuestionList.find({
            "topics.quesList.quesListName": new RegExp(req.query.quesListName, 'i')
        },
        function(err, questionList) {
            if (err) {
                return handleError(res, err);
            }
            return res.status(200).json(fnData(questionList));
        });
};

作为回应,我得到整个文件而不是搜索到的数据。

1 个答案:

答案 0 :(得分:0)

知道QuestionList.find将返回array并假设quesListName不是唯一的,我们只能检索quesList匹配的quesListName

QuestionList.find({
        "topics.quesList.quesListName": new RegExp(req.query.quesListName, 'i')
    },
    function(err, questionList) {
        if (err) {
            return handleError(res, err);
        } else {

            var output = [];

            questionList.forEach(function(each_1) {

                each_1.topics.forEach(function(each_2) {

                    each_2.quesList.forEach(function(each_3) {

                       if(each_3.quesListName.toLowerCase() === req.query.quesListName.toLowerCase()) {

                            output.push(each_3);

                       }

                    });
                });
            });

            return res
                .status(200)
                .json(output);
        }
    });

这应该返回一个对象数组,其中每个对象都是quesList