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

Getting number of likes for a user in all his posts using mongodb

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

我的帖子数据库

  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,
  },

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

您可以试试这个查询

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

您可以找到此查询的演示 here

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

我创建了 3 个不同的模型。用户,Posts,喜欢。 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,
}
  1. 在抓取post时,可以使用聚合函数,用post抓取点赞as 此处显示.
  2. 如果您想获取用户收到的点赞数,您可以通过以下方式轻松完成:Like.find({userId}).countDocuments()

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