You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Prisma中如何选择指定字段并获取关联计数?

问题:Prisma中如何仅选择id字段同时获取关联计数?

我用TypeScript搭配Prisma开发,定义了如下EmailAccount模型:

model EmailAccount {
  id                    String                  @id @default(uuid())
  email                 String                  @unique
  name                  String                  @default("")
  imapServer            String                  @default("")
  imapPort              Int                     @default(993)
  imapSecure            Boolean                 @default(true)
  smtpServer            String                  @default("")
  smtpPort              Int                     @default(465)
  smtpSecure            Boolean                 @default(true)
  dateCreated           DateTime                @default(now())
  dateUpdated           DateTime                @default(now())
  active                Boolean                 @default(false)
  passwordEncrypted     String                  @default("")
  passwordIV            String                  @default("")
  passwordAuthTag       String                  @default("")
  passwordKey           Int                     @default(0)
  keyRotationDate       DateTime                @default(now())
  keyRotationFrequency  String                  @default("")
  keyNextRotationDate   DateTime                @default(now())
  KeyRotationStatus     String                  @default("NeverRotated")
  StorePassword         Boolean                 @default(true)
  MaxToRetrieve         Int                     @default(100)
  emailRules            EmailRule[] // Relation to EmailRule records
  folders               Folder[] // Relation to Folder records
  RulesProcessedHistory RulesProcessedHistory[] // Relation to RulesProcessedHistory records
}

执行以下代码时,能正常返回emailAccount的所有字段及关联数据的计数:

const emailAccounts = await prisma.emailAccount.findMany({
  include: {
    _count: {
      select: { folders: true, emailRules: true, RulesProcessedHistory: true },
    },
  },
});

但尝试在include中添加id: true以仅获取id字段时,出现TypeScript错误:TS2353: Object literal may only specify known properties, and id does not exist in type EmailAccountInclude<DefaultArgs>,错误代码如下:

const emailAccounts = await prisma.emailAccount.findMany({
  include: {
    id: true,
    _count: {
      select: { folders: true, emailRules: true, RulesProcessedHistory: true },
    },
  },
});

想请教为何会出现该错误,以及如何实现仅选择id字段同时获取关联计数?


错误原因

include的作用是加载关联模型的完整数据,它只接受模型的关联字段(比如emailRules、folders)或特殊的聚合选项(比如_count),不支持指定模型自身的标量字段(比如id、email)。你把id放在include对象里,不符合Prisma的API规范,因此触发TypeScript类型校验错误。

解决方案

要筛选模型自身的字段,需要使用select选项,同时可以在select中包含_count来获取关联计数。正确代码如下:

const emailAccounts = await prisma.emailAccount.findMany({
  select: {
    id: true,
    _count: {
      select: { folders: true, emailRules: true, RulesProcessedHistory: true },
    },
  },
});

这段代码会返回仅包含id字段和对应关联计数的结果,完全符合需求。


内容的提问来源于stack exchange,提问作者Peter Kellner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:15:25