对于真正糟糕的标题感到抱歉,无法弄清楚如何更好地描述问题。
我在Schema中有这个:
'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 ex中输入。 let filter = {language: {$in: ["be","bg"]}};
然后结果将返回所有正确的文档。
当我控制台登录languages
var时,我得到:"be","bg"
所以params很好。
这里发生了什么?
答案 0 :(得分: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 }};
答案 1 :(得分:1)
尝试更改
let filter = {language: {$in: [languages]}};
到
let filter = {language: {$in: languages.split(',')}};
并做
http://localhost:3003/api/v1/test/query?take=50&page=1&languages=be,bg