带排序的Mongoose查询不起作用

wrrgggsh  于 2023-02-23  发布在  Go
关注(0)|答案(3)|浏览(216)

我正在尝试实现一个基本的排序函数来查询我的mongoDB数据库,但是我遇到了麻烦。

exports.getAllFamilyPlots = async (req, res) => {
  try {
    //BUILD QUERY
    const queryObj = { ...req.query };
    const excludedFields = ['page', 'sort', 'limit', 'fields'];
    excludedFields.forEach((el) => delete queryObj[el]);

    let queryStr = JSON.stringify(queryObj);
    queryStr = queryStr.replace(/\b(gte|gt|lte|lt)\b/g, (match) => `$${match}`);

    let query = await Plot.find(JSON.parse(queryStr));

    //SORTING
    if (req.query.sort) {
      query = query.sort(req.query.sort);
    }
    //EXECUTE QUERY
    const plots = await query;

    res.status(200).json({
      status: 'success',
      results: plots.length,
      data: {
        plots,
      },
    });
  } catch (err) {
    res.status(404).json({
      status: 'fail',
      message: err,
    });
  }
};

我试着把查询放到postman中,把“?sort=size”放在我的路径的末尾,我得到了以下结果:

{
    "status": "fail",
    "message": {}
}

把“req.query.sort”记录到控制台会得到“size”,就像我在postman中输入的一样。2记录“query”会得到我数据库中的4个对象,但是在排序行之后记录它绝对不会得到任何结果。3即使我尝试用query.sort(size);硬编码它,它仍然不会向控制台记录任何结果。4我是不是用错了mongoose中的.sort函数,或者发生了什么事?

yyyllmsg

yyyllmsg1#

通过删除此行中的“等待”进行修复;

let query = await Plot.find(JSON.parse(queryStr));

在我上面发布的代码的第11行。

vdgimpew

vdgimpew2#

我也面临着同样的问题,而使项目,但我已经解决了它。按照所有的步骤仔细。
1.从此行代码中删除“await”。

let query = await Plot.find(JSON.parse(queryStr));

1.确保在重新分配查询变量的值时未使用const。
1.使用此代码

let query = Tour.find(JSON.parse(queryStr));

    // 2) Sorting
    if (req.query.sort) {
      query = query.sort(req.query.sort);
    }
ncgqoxb0

ncgqoxb03#

if (req.query.sort && typeof req.query.sort === 'function') {
  query = query.sort(req.query.sort);
}

相关问题