代码之家  ›  专栏  ›  技术社区  ›  Aldo

使用$in的find中的mongoose动态查询不起作用

  •  1
  • Aldo  · 技术社区  · 6 年前

    我使用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 回复  |  直到 6 年前
        1
  •  0
  •   Aldo    6 年前

    我发现了错误,它是由 mongoose-paginate 插件。因此,如果您将此插件与Mongoose一起使用,请小心传递给查询的参数。

    在我的例子中,传递一个数组作为带选项的过滤器 $in 不适用于 mongoose-paginate .

        2
  •  0
  •   Saurabh Mistry    6 年前

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