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

使用Prisma Client创建MongoDB记录时遇ObjectID格式错误

解决Prisma Client向MongoDB创建记录时的ObjectID格式错误问题

问题本质

错误里的字符串是带连字符的UUID格式,但MongoDB的ObjectID要求是24位无连字符的十六进制字符串——Prisma默认生成的ObjectID符合规则,问题出在你传入的id格式不对,或者schema的字段定义有误。

具体解决方案

  • 修正schema中的id字段定义
    确保model里的id字段明确对应MongoDB的ObjectId类型,正确写法如下:

    model YourModel {
      id    String @id @default(auto()) @map("_id") @db.ObjectId
      // 其他业务字段按需添加
    }
    

    其中@db.ObjectId指定字段映射MongoDB的ObjectId类型,@map("_id")对应MongoDB默认的主键字段,@default(auto())让Prisma自动生成合法的ObjectID。

  • 禁止手动传入带连字符的UUID作为id
    如果创建记录时你手动给id赋值了类似"135a20ad-3244-46ed-80cf-a09a37ae4e85"的字符串,二选一处理:

    • 直接删除id参数,让Prisma自动生成合法值;
    • 去掉UUID的连字符,转换成24位十六进制字符串再传入(比如"135a20ad324446ed80cfa09a37ae4e85")。
  • 重新生成Client并重启服务
    修改schema后必须运行以下命令更新Prisma Client:

    npx prisma generate
    

    开发环境下建议重启服务,确保新的Client代码生效。

  • 特殊需求:用UUID作为主键(不推荐)
    如果你确实需要用带连字符的UUID做主键,可以修改schema让id字段生成UUID,此时MongoDB会将id存储为字符串而非ObjectID:

    model YourModel {
      id    String @id @default(uuid())
      // 其他业务字段按需添加
    }
    

    注意这种方式会丢失MongoDB ObjectID自带的时间戳、机器标识等特性,仅在特殊场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:27:11