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

如何在Prisma中对名为count的字段执行orderBy排序?

问题原因

Prisma Client将count识别为聚合操作的预留关键字,直接在orderBy配置中以count为键声明排序规则时,会被判定为聚合操作参数而非字段名,因此触发参数校验错误。

可用解决方案

  • 方案1:使用生成的标量字段枚举指定字段(推荐,无需修改现有结构)
    导入Prisma客户端自带的模型字段枚举,通过动态键的方式指定排序字段,避开关键字识别逻辑:

    import { Prisma } from '@prisma/client'
    
    const where = // ...
    const limit = // ...
    const offset = // ...
    const data = await this.prisma.translation.findMany({
          where,
          take: limit,
          skip: offset,
          orderBy: [
            {
              [Prisma.TranslationScalarFieldEnum.count]: 'asc'
            }
          ]
        });
    
  • 方案2:使用原生查询实现排序
    如果枚举方案不生效,可以直接通过$queryRaw手写SQL实现排序逻辑:

    const data = await this.prisma.$queryRaw`
      SELECT * FROM translation
      ORDER BY count ASC
      LIMIT ${limit} OFFSET ${offset}
    `
    

    如有复杂查询条件,可以配合Prisma.sql模板工具拼接WHERE逻辑。

  • 方案3:修改Schema做字段映射(一劳永逸)
    调整Prisma模型定义,给数据库的count字段映射一个非保留字的客户端字段名:

    model Translation {
      id           String
      viewCount    Int      @map("count") @default(0)
    }
    

    修改后执行prisma generate更新客户端类型,后续在代码中直接使用orderBy: { viewCount: 'asc' }即可,完全避开关键字冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:09:05