$ in中的猫鼬动态查询无法正常工作

时间:2018-11-27 19:03:50

标签: javascript node.js mongodb mongoose

我正在使用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 ..存在时,它不会返回任何内容。

怎么了?

2 个答案:

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