$ in inside查询,没有结果MongoDB,奇怪的行为

时间:2017-09-05 13:11:06

标签: node.js mongodb express mongoose

对于真正糟糕的标题感到抱歉,无法弄清楚如何更好地描述问题。

我在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很好。

这里发生了什么?

2 个答案:

答案 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