gpt4 book ai didi

mongodb - 通过浏览他/她的所有帖子获得该用户收到的喜欢总数 MongoDB

转载 作者:行者123 更新时间:2023-12-04 03:30:12 24 4
gpt4 key购买 nike

我目前正在使用 MERN 堆栈创建一个简单的 SNS 应用程序。

然而,我在尝试提出一个可以遍历用户发布的所有帖子并获得喜欢的总和的查询时遇到了困难。

目前我已经创建了 3 个架构。用户、发布、回复。

用户

  const userSchema = new Schema({

facebookId: {
required: true,
type: String,
},

username: {
required: true,
type: String,
},

joined: Date
})

发布

const postSchema = new Schema({
title: String,
body: String,
author: { type: Schema.Types.ObjectId, ref: "User" },
datePosted: Date,
reply: [{ type: Schema.Types.ObjectId, ref: 'Reply'}],
tag: [ {type: String} ]

});

回复

 const replySchema = new Schema({
title: String,
body: String,
author: { type: Schema.Types.ObjectId, ref: "User" },
datePosted: Date,
post: [{ type: Schema.Types.ObjectId, ref: 'Post'}],
likes: [{ type: Schema.Types.ObjectId, ref: "User" }] // storing likes as array
});

如您所见,我在回复架构中添加了 likes 字段作为一个接受用户 ObjectId 的数组。假设某个用户发布了 4 个回复,每个回复分别收到 1 ,3, 4, 5 个赞。在排行榜部分,我想显示用户信息以及他们从所有回复中收到的总计数,即 1+3+4+5 = 13 个赞。

这是否可以在不添加额外字段的情况下实现,或者是否有更好的架构架构方法。

最佳答案

如果要公开显示此字段,那么我个人建议不要即时计算,而是预先计算并将其保存在用户身上,因为聚合数据非常昂贵,不应成为您应用程序逻辑的一部分,特别是如果需要为每个用户计算 leaderboard 功能。

这里说的是如何用 aggregation framework 计算它

db.replies.aggregate([
{
$match: {
author: userid
}
},
{
$group: {
_id: null,
likes: {$sum: {$size: '$likes'}}
}
}
]);

正如我所说,我建议您离线执行此操作,为每个用户运行一次,并在用户上保存一个 likeCount 字段,然后您可以更新创建赞的其他路由以更新用户喜欢计数使用 $inc .

// .. new like created ...
db.users.updateOne({_id: liked_reply.author}, {$inc: {likeCount: 1}})

现在查找排行榜非常容易:

const leaders = await db.users.find({}).sort({likeCount: -1}).limit(10) //top 10?

关于mongodb - 通过浏览他/她的所有帖子获得该用户收到的喜欢总数 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67041928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com