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
应该已经是一个数组,而不是您当前传递的字符串。