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

如何用Prisma从Postgres数组字段中获取去重字符串值

解决Prisma提取Postgres数组字段中去重元素的问题

你当前的代码用distinct: ['genres']会把整个genres数组当作一个独立单元去重,所以返回的是不同的数组组合,而不是拆分后的单个流派值。这里提供两种可行的解决方案:

方法一:用原生SQL直接在数据库层处理(推荐大数据量场景)

利用Postgres的unnest函数展开数组,再做去重,通过Prisma的$queryRaw执行原生查询:

// 执行原生SQL获取去重后的流派
const genreRows = await db.$queryRaw`
  SELECT DISTINCT unnest(genres) AS genre
  FROM track
`;
// 提取结果中的genre字段,转为目标数组格式
const uniqueGenres = genreRows.map(row => row.genre);

这个方法在数据库层面完成展开和去重,能减少传输到应用程序的数据量,数据量大时效率更高。

方法二:在应用层处理(适合小数据量场景)

先查询所有track的genres数组,再用JavaScript的数组方法展开、去重:

// 获取所有track的genres数组
const tracks = await db.track.findMany({
  select: { genres: true }
});
// 展开所有数组元素,用Set去重后转回数组
const uniqueGenres = [...new Set(tracks.flatMap(track => track.genres))];

这种方法不需要写原生SQL,代码更贴合Prisma的ORM使用习惯,适合数据量不大的情况。

两种方法最终都能得到你期望的['house', 'techno']格式结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:33