2016-05-16 88 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作爲「指令問題列表「 –