我的架构如下:
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));
});
};
作为回应,我得到整个文件而不是搜索到的数据。
答案 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
。