我正在尝试实现类似于 HackerNews/Reddit 所做的“按热排序”,如此处所述。
我想像这样计算帖子的排名:
const age = new Date() - createdAt
const gravity = 1.8
const rankScore = (score - 1) / (age + 2) ** gravity
该Post
模型有一个score
值 - 帖子收到了多少赞成票,以及createdAt
- 它的创建时间。越高rankScore
,我希望帖子越接近列表顶部。所以我想取score
和createdAt
值,用它们来计算rankScore
,然后这样做orderBy
。
在 Prisma 中实现这一点的正确方法是什么?
现在我只是返回最受好评的帖子列表,如下所示:
prisma.post.findMany({
where: {
authorId: authorId,
published: args.published || undefined,
},
orderBy: [{ score: "desc" }],
})
因此,很容易按模型上已经存在的字段对帖子进行排名,但我需要在页面加载时实时计算它,因为rankScore
取决于帖子的年龄,将这样的内容存储在D b。
这是我正在编写的实际解析器代码(请参阅posts
查询)。