使用 mongodb 在用户的所有帖子中获取用户的点赞数

Posted

技术标签:

【中文标题】使用 mongodb 在用户的所有帖子中获取用户的点赞数【英文标题】:Getting number of likes for a user in all his posts using mongodb 【发布时间】:2020-09-27 16:10:27 【问题描述】:

您好,我想建立一个排行榜,根据用户在所有帖子中累积的点赞数对用户进行排名。

我的帖子数据库

  user: 
    type: Schema.Types.ObjectId,
  ,
  text: 
    type: String,
    required: true,
  ,
  imageURL: 
    type: [String],
  ,
  name: 
    type: String,
    required: true,
  ,
  category: 
    type: String,
  ,
  likes: [
    
      user: 
        type: Schema.Types.ObjectId,
      ,
    ,
  ],
  date: 
    type: Date,
    default: Date.now,
  

我的用户数据库:


  name: 
    type: String,
    required: true,
  ,
  email: 
    type: String,
    required: true,
    unique: true,
  ,
  password: 
    type: String,
    required: true,
  ,
  date: 
    type: Date,
    default: Date.now,
  ,

我尝试了各种查询和聚合函数,但我无法为此找到正确的解决方案。有没有其他方法可以获取列表。 我想获得一个用户列表和他们在所有帖子中获得的总喜欢。我该怎么做?

【问题讨论】:

【参考方案1】:

我最近遇到了同样的情况,我是这样解决的:

我创建了 3 个不同的模型。用户,帖子,喜欢。 Post 模型将是:

 user: 
    type: Schema.Types.ObjectId,
  ,
  text: 
    type: String,
    required: true,
  ,
  imageURL: 
    type: [String],
  ,
  name: 
    type: String,
    required: true,
  ,
  category: 
    type: String,
  ,
  date: 
    type: Date,
    default: Date.now,
  

点赞模式:

postId: 
  type: Schema.Types.ObjectId,
  required: true
,
userId: 
  type: Schema.Types.ObjectId,
  required: true
,
likedBy: 
  type: Schema.Types.ObjectId,
  ref: 'User',
  required: true,

    在获取帖子时,您可以使用聚合函数并获取帖子as shown here的赞。 如果您想获取用户收到的点赞数,您可以通过以下方式轻松完成:Like.find(userId).countDocuments()

在这种情况下避免使用数组。 因为用户喜欢没有限制。 如果您的应用程序增长,以这种方式管理赞将是一场噩梦。

【讨论】:

我实际上解决了它,虽然我并不为解决方案感到自豪,但我在配置文件模型中添加了另外 2 个字段,即 numberPosts 和 likes。在喜欢、不喜欢、创建/删除帖子的过程中,我调用了配置文件模型并每次更新。 这很酷,但不要在 Post 模式中使用 likes 作为数组,而是使用单独的 Like 模型。 :) 哈,我试一试。谢谢【参考方案2】:

你可以试试这个查询

db.collection.aggregate([
  
    $project: 
      user: 1,
      numberOfLikes: 
        $cond: 
          if: 
            $isArray: "$likes"
          ,
          then: 
            $size: "$likes"
          ,
          else: "NA"
        
      
    
  
])

你可以找到这个查询的演示here

【讨论】:

以上是关于使用 mongodb 在用户的所有帖子中获取用户的点赞数的主要内容,如果未能解决你的问题,请参考以下文章

我如何计算 mongoDB 中的所有用户和帖子

MongoDB和Mongoose:无法使用.populate()填充用户的帖子

如何使用 mongodb 和 mongoose 从帖子模型中计算整体帖子活动(喜欢、不喜欢、评论)和用户模型中的参考总和

获取firestore中每个帖子的用户喜欢和总喜欢的所有帖子列表

WordPress——统计所有用户的帖子

仅显示登录用户的帖子