我正在尝试实现类似于 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查询)。