如何从Prisma $queryRaw的COUNT查询结果中提取数值?
解决Prisma $queryRaw执行COUNT查询后提取数值的问题
当使用Prisma的$queryRaw执行COUNT查询时,返回的结果是包含单个对象的数组,而非直接的数值。直接拼接字符串时,对象会被转为[object Object],可按以下方式提取目标数值:
方法1:给计数结果起别名(推荐)
给COUNT查询的结果指定别名,通过别名直接提取数值,这种方式不依赖数据库的默认列名,兼容性更好:
// 给COUNT结果起别名count const rowCountResult = await prisma.$queryRaw`SELECT COUNT(1) AS count FROM MyTable;`; // 取数组第一个元素的count属性 const rowCount = rowCountResult[0].count; console.log('rowCount: ' + rowCount); // 输出123
方法2:使用数据库默认列名(不推荐)
如果不想起别名,可以直接访问数据库返回的默认列名,但不同数据库的默认列名可能不同(比如PostgreSQL默认是count,MySQL会保留COUNT(1)作为列名):
const rowCountResult = await prisma.$queryRaw`SELECT COUNT(1) FROM MyTable;`; // 以MySQL为例,访问COUNT(1)对应的属性 const rowCount = rowCountResult[0]['COUNT(1)']; console.log('rowCount: ' + rowCount);
TypeScript类型优化
避免使用any,可以定义类型约束返回结果,提升代码可读性:
type CountResult = { count: number }; const rowCountResult = await prisma.$queryRaw<CountResult[]>`SELECT COUNT(1) AS count FROM MyTable;`; const rowCount = rowCountResult[0].count;
内容的提问来源于stack exchange,提问作者spacedog
相关产品推荐
相关产品推荐

