使用 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和Mongoose:无法使用.populate()填充用户的帖子
如何使用 mongodb 和 mongoose 从帖子模型中计算整体帖子活动(喜欢、不喜欢、评论)和用户模型中的参考总和