带排序的猫鼬查询不起作用
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);
【讨论】:
以上是关于带排序的猫鼬查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章