我正在使用Node.js和Mongoose 5+在数据库中动态构建查询。变量filterField
是字段名称,而filterValues
是数组。所以,我的代码是这样的:
if (req.currentUser.activePage) {
queryParam['pageId'] = req.currentUser.activePage;
if (filterField && filterValues)
queryParam[filterField] = { $in: filterValues };
query = Model.find(queryParam);
console.info(queryParam);
}
Model.paginate(query, options, async (err, result) => {
if (err) {
res.status(500).json({ message: err.errmsg });
} else {
res.status(200).json(result.docs);
}
});
打印的queryParam
如下:
{ pageId: '123', id: { '$in': [ 1, 2 ] } }
如果我直接在Mongo shell中运行此查询,它将运行正常。
但是,当我在Mongoose中运行此查询时,当id: {$in ..
存在时,它不会返回任何内容。
怎么了?
答案 0 :(得分:0)
您已将错误的参数查询传递给Model.paginate()
方法,请尝试以下方法:
if (req.currentUser.activePage) {
queryParam['pageId'] = req.currentUser.activePage;
if (filterField && filterValues){
queryParam[filterField] = { '$in': filterValues };
}
Model.paginate(queryParam, options, async (err, result) => {
if (err) {
res.status(500).json({ message: err.errmsg });
} else {
res.status(200).json(result.docs);
}
});
}
答案 1 :(得分:0)
我发现了错误,这是由mongoose-paginate插件引起的。因此,如果您将此插件与Mongoose一起使用,请小心传递给查询的参数。
就我而言,使用选项$in
作为过滤器传递数组不适用于mongoose-paginate
。