Prisma:如何在查询返回中添加一列?
Posted
技术标签:
【中文标题】Prisma:如何在查询返回中添加一列?【英文标题】:Prisma : how can I add a column on a query return? 【发布时间】:2021-12-22 07:44:29 【问题描述】:假设我有一个表User
有一个名称和一个ID,还有一个表Post
有一个名称和内容。这两个表通过多对多关系链接(一个帖子可以有很多用户/作者,每个用户可以有很多帖子)
例子:
model User
id Int @id @default(autoincrement())
name String
posts users_to_posts[]
model Post
id Int @id @default(autoincrement())
name String
users users_to_posts[]
model user_to_post
user user? @relation(fields: [user_id], references: [id])
user_id Int
post signe? @relation(fields: [post_id], references: [id])
post_id Int
@@id([user_id, post_id])
我想要做的是查询用户表并获得发表最多帖子的前 10 位用户。
但是,我不希望只返回用户 + 帖子计数的组合,而是在返回的 JSON 中完整返回用户、他的 ID 和他写的帖子数量作为单独的键
我试图获得的示例(使用 nextJS):
import PrismaClient, Prisma from '@prisma/client'
const prisma = new PrismaClient()
export default async function handler(req, res)
const ret = await prisma.user.findMany(
include:
posts:
select:
post: true
// include post count
// order by post count
// limit 10
);
res.status(200).json(ret)
如您所见,我的表中没有“计数”列,它必须在查询期间插入
我现在最好的选择是解析获得的 json(ret 变量)并通过 typescript 完成所有操作,但这远非理想
【问题讨论】:
【参考方案1】:您可以使用orderBy
按count
的posts
对user
记录进行排序。此外,您可以使用take
运算符来限制记录数(类似于SQL 中的LIMIT
命令)。最后,要包含 count
的帖子,您可以将其添加到 include
中。
这是您要查找的查询
await prisma.user.findMany(
orderBy:
posts:
_count: "desc",
,
,
take: 10,
include:
_count:
select:
posts: true,
,
,
,
);
据我了解,您只想返回帖子的count
,而不是帖子记录本身。但是,如果您还想返回帖子记录,您也可以将其添加到 include
语句中,就像您目前正在做的那样。
从文档中进一步阅读所使用的运算符:
Sorting by relation aggregate values Select Relation Count【讨论】:
以上是关于Prisma:如何在查询返回中添加一列?的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Query 标准 SQL,在 SELECT 语句中添加一列