2016-05-16 87 views
0

使用正则表达式对象的数组搜索我有我的架构如下图所示:查询到在猫鼬

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

明知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

+0

谢谢你的建议。我也尝试过投影对象,但我无法得到唯一的搜索问题列表作为回应,而不是我得到整个文件 –

+0

@Shikhathakur你能提供一个例子,输出应该是什么样子? –

+0

假设我有quesList数组quesListName中的两个对象作为“指令问题列表”,并在第二个对象quesListName作为“控制器问题列表”,所以如果我搜索指令问题列表我只需要获取具有quesListName作为“指令问题列表“ –