首页 > 解决方案 > 使用 $in 查找的 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 ..

错误是什么?

标签: javascriptnode.jsmongodbmongoose

解决方案


您已将错误的参数查询传递给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);
       }
    });
}

推荐阅读