首页 > 解决方案 > 如何在 Prisma 中按自定义值对项目进行排序?(尝试在 Hacker News 或 Reddit 上实现“按热排序”)

问题描述

我正在尝试实现类似于 HackerNews/Reddit 所做的“按热排序”,如此处所述

我想像这样计算帖子的排名:

const age = new Date() - createdAt
const gravity = 1.8
const rankScore = (score - 1) / (age + 2) ** gravity

Post模型有一个score值 - 帖子收到了多少赞成票,以及createdAt- 它的创建时间。越高rankScore,我希望帖子越接近列表顶部。所以我想取scorecreatedAt值,用它们来计算rankScore,然后这样做orderBy

在 Prisma 中实现这一点的正确方法是什么?

现在我只是返回最受好评的帖子列表,如下所示:

prisma.post.findMany({
  where: {
    authorId: authorId,
    published: args.published || undefined,
  },
  orderBy: [{ score: "desc" }],
})

因此,很容易按模型上已经存在的字段对帖子进行排名,但我需要在页面加载时实时计算它,因为rankScore取决于帖子的年龄,将这样的内容存储在D b。

这是我正在编写的实际解析器代码(请参阅posts查询)。

标签: prismaprisma2nexus-prisma

解决方案


推荐阅读