You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

博客分页实现按最新发布降序排列的技术求助

解决分页时博客按创建时间降序排列的问题

嘿,我一眼就发现问题所在啦!你的博客Schema里存储创建时间的字段是created,但你在排序逻辑里一直用的是date——这就是排序没生效的核心原因!

具体修正步骤:

  • 给搜索分支修正排序字段:把sort('-date')替换为sort('-created')(或者等价的sort({created: -1})写法)
  • 给非搜索分支添加排序逻辑:原来的非搜索查询完全没加排序规则,需要补上相同的排序配置

修正后的完整代码:

// INDEX ROUTE
router.get("/blogs", function (req, res) {
 var perPage = 10;
 var pageQuery = parseInt(req.query.page);
 var pageNumber = pageQuery ? pageQuery : 1;
 var noMatch = null;
 if (req.query.search) {
 const regex = new RegExp(escapeRegex(req.query.search), 'gi');
 Blog.find({name: regex})
   .skip((perPage * pageNumber) - perPage)
   .limit(perPage)
   .sort('-created') // 修正排序字段为Schema中定义的created
   .exec(function (err, blogs) {
 Blog.count({name: regex}).exec(function (err, count) {
 if (err) {
 console.log("ERROR!");
 } else {
 if (blogs.length < 1) {
 noMatch = "No blogs match that query, please try again";
 }
 res.render("blogs/index", {blogs: blogs, current: pageNumber, pages: Math.ceil(count / perPage), currentUser: req.user, noMatch: noMatch, search: req.query.search});
 }
 });
 });
 } else {
 Blog.find({})
   .skip((perPage * pageNumber) - perPage)
   .limit(perPage)
   .sort('-created') // 新增排序规则,字段名匹配Schema
   .exec(function (err, blogs) {
 Blog.count().exec(function (err, count) {
 if (err) {
 console.log("ERROR!");
 } else {
 res.render("blogs/index", {blogs: blogs, current: pageNumber, pages: Math.ceil(count / perPage), currentUser: req.user, noMatch: noMatch, search: false});
 }
 });
 });
 }
});

额外说明:

你之前尝试的那些排序写法本身都是正确的,但因为字段名和Schema不匹配(Schema里是created而非date),所以完全没起到作用。如果更习惯用date作为字段名,也可以把Schema里的created字段重命名为date,但更推荐保持现有Schema结构,修正排序的字段名即可。

另外,为了减少代码冗余,你可以把重复的分页+排序逻辑抽成一个单独的函数,这样后续维护会更方便~

内容的提问来源于stack exchange,提问作者JS Bach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:31:48