如何在Prisma ORM中不获取完整content而生成hasContent标识
Prisma查询时直接生成hasContent字段的实现方法
你可以通过以下两种方式实现,避免查询完整的content字段,直接在数据库层面生成hasContent:
方法一:使用原生SQL查询(完全匹配你需要的SQL逻辑)
直接用Prisma的$queryRaw执行原生SQL,精准控制查询逻辑,不会拉取完整的content内容:
const filters = { ... }; // 你的原有过滤条件 // 转换filters为SQL条件(支持动态过滤) const whereClause = Prisma.sql`WHERE ${Prisma.filter(filters)}`; const data = await prismaClient.$queryRaw` SELECT id, title, (CASE WHEN content IS NOT NULL AND content != '' THEN TRUE ELSE FALSE END) AS "hasContent" FROM "Article" ${whereClause} `;
若无需动态过滤,可简化为:
const data = await prismaClient.$queryRaw` SELECT id, title, (CASE WHEN content IS NOT NULL AND content != '' THEN TRUE ELSE FALSE END) AS "hasContent" FROM "Article" `;
方法二:使用Prisma计算字段(Prisma 4.16+版本支持)
从Prisma 4.16开始,支持在select中定义基于SQL表达式的计算字段,写法更贴合Prisma查询风格:
const filters = { ... }; const data = await prismaClient.article.findMany({ where: filters, select: { id: true, title: true, hasContent: { $expr: Prisma.sql`content IS NOT NULL AND content != ''` } } });
两种方式都会让数据库仅判断content是否非空且不为空字符串,不会返回完整content内容,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Jk041
相关产品推荐
相关产品推荐

