如何通过Prisma自动为MongoDB添加带默认值的新字段?
问题解答
首先明确:Prisma配合MongoDB时,新增带默认值的字段不会自动给现有文档填充该字段,这是由MongoDB的无模式特性决定的——Prisma的db push或migrate dev只会更新自身的Schema定义,确保新创建的文档自动带上completed: false的默认值,但不会主动修改已存在的Task文档。
要给现有Task文档批量填充completed字段,有两种直接可行的方式:
方式一:用Prisma Client编写脚本批量更新
创建一个简单的Node.js脚本,借助Prisma Client遍历并更新所有Task:
// update-tasks.js const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); async function updateTasks() { await prisma.task.updateMany({ data: { completed: false, }, }); console.log('所有现有Task已填充completed字段为false'); await prisma.$disconnect(); } updateTasks().catch((e) => { console.error(e); process.exit(1); });
运行脚本:node update-tasks.js即可完成批量更新。
方式二:直接使用MongoDB Shell命令更新
如果不想写Node.js脚本,可以直接连接到MongoDB实例,执行以下命令:
db.tasks.updateMany({}, { $set: { completed: false } })
这条命令会将tasks集合中所有文档的completed字段设置为false,不存在该字段的文档会自动添加。
补充说明:后续新创建的Task文档,会通过Prisma的Schema定义自动带上completed: false的默认值,无需额外处理。
内容的提问来源于stack exchange,提问作者user23960184
相关产品推荐
相关产品推荐

