Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js $in inside查询,MongoDB中没有结果,行为奇怪_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js $in inside查询,MongoDB中没有结果,行为奇怪

Node.js $in inside查询,MongoDB中没有结果,行为奇怪,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,很抱歉这个标题很糟糕,我想不出如何更好地描述这个问题 我在模式中有这样一个: “语言”:[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.f

很抱歉这个标题很糟糕,我想不出如何更好地描述这个问题

我在模式中有这样一个:
“语言”:[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
                });
            }
        });
    });
这是获取url的方法:
http://localhost:3003/api/v1/test/query?take=50&page=1&languages=“be”、“bg”

问题是我总是得到0个计数,但是如果我直接在过滤器变量ex.
let filter={language:{$in:[“be”,“bg”]}然后返回所有正确文档的结果

当我控制台记录
语言
变量时,我得到:
“be”,“bg”
,因此参数很好


这是怎么回事?

req.query.languages
不是数组。您应该更改客户端以在查询中发送正确的数组:
http://localhost:3003/api/v1/test/query?take=50&page=1&languages=be&languages=bg
或更新操作以分析
语言
参数

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 }};

req.query.languages
不是数组。您应该更改客户端以在查询中发送正确的数组:
http://localhost:3003/api/v1/test/query?take=50&page=1&languages=be&languages=bg
或更新操作以分析
语言
参数

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 }};
尝试改变

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

尝试更改

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

&languages=“be”&languages=“bg”
“应该”作为数组进行解析,而无需后期处理。然后它将只是
{language:{$in:req.query.languages}
,因为
req.query.languages
应该已经是一个数组,而不是您当前传递的字符串。
&languages=“be”&languages=“bg”
“应该”作为数组进行解析,而不需要后期处理。那么它就是
{language:{$in:req.query.languages}
,因为
req.query.languages
应该已经是一个数组,而不是您当前传递的字符串。