Запрос для поиска в массиве объектов с использованием регулярного выражения в мангусте

76
5

У меня есть моя схема, как показано ниже:

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

Здесь, в ответ, я получаю весь документ вместо данных поиска.

спросил(а) 2016-05-16T05:08:00+03:00 4 года, 1 месяц назад
1
Решение
85

Зная, что 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.

ответил(а) 2016-05-16T05:24:00+03:00 4 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема