使用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
相关产品推荐
相关产品推荐

