使用 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,
}
- 在抓取post时,可以使用聚合函数,用post抓取点赞as
此处显示.
- 如果您想获取用户收到的点赞数,您可以通过以下方式轻松完成:
Like.find({userId}).countDocuments()
避免在这种情况下使用数组。
因为用户喜欢是没有限制的。
如果您的应用程序增长,以这种方式管理点赞将是一场噩梦。
你好,我想建立一个排行榜,根据用户在所有帖子中积累的点赞数对用户进行排名。
我的帖子数据库
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,
}
- 在抓取post时,可以使用聚合函数,用post抓取点赞as 此处显示.
- 如果您想获取用户收到的点赞数,您可以通过以下方式轻松完成:
Like.find({userId}).countDocuments()
避免在这种情况下使用数组。 因为用户喜欢是没有限制的。 如果您的应用程序增长,以这种方式管理点赞将是一场噩梦。