【问题标题】:Mongoose/Express - Counting number of likesMongoose/Express - 计算点赞数
【发布时间】:2020-11-11 11:30:33
【问题描述】:

我有一个带有博客架构的 Mongoose/Express 应用程序,其他用户可以在其中“喜欢”博客。在博客索引中,我想按每个博客的点赞数排序。

在博客架构中,我添加了一个名为 noOfLikes 的字段,但我不确定如何在博客控制器(或其他地方)下实现计数以允许我按 noOfLikes 对记录进行排序。

带有 likes 和 noOfLikes 字段的博客架构(为简单起见,删除了其他字段):

let blogSchema = new mongoose.Schema({
   comments: [
      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "Comment"
      }   
   ],
   likes: [
      {
          type: mongoose.Schema.Types.ObjectId,
          ref: "User"
      }
   ],
   noOfLikes: { type: Number, default: 0 },
});

module.exports = mongoose.model("Blog", blogSchema);

博客控制器,按 noOfLikes 排序目前无法正常工作,因为不确定如何在控制器中实现点赞计数:

    async blogIndexAll (req, res, next) {

        blogs = await Blog.find().sort({ 'noOfLikes': -1 });

        res.render("blogViews/blog", {blogs, cloudinary, currentUser: req.user});
    },

【问题讨论】:

  • 这里是queryObject 未定义还是为了简洁而省略了?
  • 嗨@ippi 我认为那里的代码是正确的,但我不需要另一行将 Likes 字段链接到 noOfLikes 字段吗?否则 noOfLikes 字段如何知道它应该计算什么?谢谢
  • 目前 noOfLikes 只是为每条记录返回 0(默认值),我认为如上所述是因为这两个字段当前没有链接,因此它没有实现的喜欢计数跨度>
  • 抱歉,我的行为很愚蠢,很抱歉浪费了您的时间。我相信您要么需要使用 $size 聚合,stackoverflow.com/a/32064160/1497533。或者首先将项目抓取到一个数组中并在没有猫鼬的帮助下对它们进行排序(即blogs = blogs.sort((a,b)=>b.likes.length- a.likes.length)
  • 哈哈@ippi 我从来没有怀疑过它! :D。我终于设法根据您的最后回复(ie blogs = blogs.sort((a,b)=>b.likes.length- a.likes.length)))找到了解决方案,所以谢谢您!不知道如何将答案标记为仅作为评论,但如果可能,请告诉我!

标签: node.js mongodb mongoose


【解决方案1】:

在查询执行后,您可以在没有 mongoose 帮助的情况下对其进行排序。

例如:

blogs = await Blog.find({}).exec();
// Using Array.prototype.sort
blogs = blogs.sort( (a,b) => b.likes.length - a.likes.length );

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多