带排序的猫鼬查询不起作用

Posted

技术标签:

【中文标题】带排序的猫鼬查询不起作用【英文标题】:Mongoose query with sorting is not working 【发布时间】:2021-11-23 11:37:09 【问题描述】:

我正在尝试实现一个基本的排序功能来查询我的 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,
    );
  
;

我尝试将查询放入邮递员中,方法是在我的路线末尾放置“?sort=size”。我得到以下信息:


    "status": "fail",
    "message": 

将“req.query.sort”记录到控制台会给我“大小”,就像我在邮递员中输入它一样。记录“查询”给出了我数据库中的 4 个对象,但在排序行之后记录它绝对没有给我任何东西。即使我尝试使用query.sort(size);对其进行硬编码,它仍然不会向控制台记录任何内容。我是否使用了 mongoose 的 .sort 函数错误,或者发生了什么?

【问题讨论】:

你缺少升序或降序排序,你可以试试 query.sort(size:1) 吗? 排序后需要执行query对象;参见 exec(),在 Mongoose API 中。 【参考方案1】:

通过从该行中删除“等待”来修复它;

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

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

【讨论】:

【参考方案2】:

我在制作项目时也遇到了同样的问题,但我已经解决了。请仔细执行所有步骤。

    从这行代码中删除“等待”。
let query = await Plot.find(JSON.parse(queryStr));
    确保在重新分配查询变量的值时没有使用 const。 使用此代码
let query = Tour.find(JSON.parse(queryStr));

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

【讨论】:

以上是关于带排序的猫鼬查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在填充中排序不起作用(猫鼬)

.find 的猫鼬选项 [重复]

没有重复的猫鼬帖子

猫鼬嵌套查找不起作用[重复]

修改猫鼬对象文字结果不起作用[重复]

使用子模型的猫鼬保存父模型