prisma - 如何在 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
,我希望帖子越接近列表顶部。所以我想取score
和createdAt
值,用它们来计算rankScore
,然后这样做orderBy
。
在 Prisma 中实现这一点的正确方法是什么?
现在我只是返回最受好评的帖子列表,如下所示:
prisma.post.findMany({
where: {
authorId: authorId,
published: args.published || undefined,
},
orderBy: [{ score: "desc" }],
})
因此,很容易按模型上已经存在的字段对帖子进行排名,但我需要在页面加载时实时计算它,因为rankScore
取决于帖子的年龄,将这样的内容存储在D b。
这是我正在编写的实际解析器代码(请参阅posts
查询)。
解决方案
推荐阅读
- javascript - 如何使用 javaScript 从对象数组中删除重复值?
- javascript - 为 img 放置一个动态 src (React/JS)
- mysql - 如何以正确的方式构建此 SQL 查询?
- mysql - 如何在 MySQL 中限制 INT?
- gradle - 在 Azure Pipelines 中复制和重命名 jar 文件
- visual-studio-code - 如何在 VSC 中指定 docker-compose 的可执行路径?
- javascript - 在 Bootstrap Vue 中动态更改选择输入
- angular - Angular Playground 设置具有封装值的样式
- java - 如何让Excel或记事本从Java中的浮动数字键盘输入数字
- java - JAVA FX - 如何从窗格中删除对象?