2017-09-05 45 views
0

對不起,真的很糟糕的標題,無法弄清楚如何更好地描述問題。

我有這樣的模式: 'language': [String]

然後在路由器我發送一個GET請求:

let page = Math.max(0, req.query.page - 1); 
let take = req.query.take || 50; 
let languages = req.query.languages; 

let filter = {language: {$in: [languages]}}; 

let query = Labels.find(filter).limit(100).sort('-_id'); 

    query.count(function (err, count) { 
     if (err) {console.log(err);} 
     query.skip(page * take).limit(take).exec('find', function (err, docs) { 
      if (err) { 
       return res.status(400).send({ 
        message: err 
       }); 
      } else { 
       res.json({ 
        count : count, 
        docs : docs, 
        language: languages 
       }); 
      } 
     }); 
    }); 

這將GET網址: http://localhost:3003/api/v1/test/query?take=50&page=1&languages="be","bg"

的問題是,我總是得到0計數,但如果我直接在過濾器var前輸入。 let filter = {language: {$in: ["be","bg"]}};然後結果返回所有正確的文件。

當我控制檯登錄languages變種,我得到:"be","bg"所以params很好。

這是怎麼回事?

+0

'&語言= 「是」 與語言= 「BG」' 「應該」 解析作爲一個數組而不需要後處理。那麼它應該是'{language:{$ in:req.query.languages}}',因爲'req.query.languages'應該已經是一個數組了,而不是你現在傳入的字符串。 –

回答

1

req.query.languages不是數組。您應該更改客戶端以在查詢中發送正確的數組:http://localhost:3003/api/v1/test/query?take=50&page=1&languages=be&languages=bg或更新一個操作以解析languages參數。

let languages = req.query.languages; // when languages is an array 
// OR 
let languages = req.query.languages.split(','); // when languages is a string 

let filter = {language: { $in: languages }};