如何用Prisma筛选包含指定元素的jsonb[]类型字段?
解决Prisma筛选数组包含任意指定元素的问题
你的问题出在array_contains的逻辑上:这个操作符要求目标数组同时包含所有传入的元素,所以只有groups同时有'A'和'B'的id=7符合条件,和你需要的「包含任意一个」逻辑不符。
下面是两种符合需求的ORM实现方式:
方式一:使用OR条件拆分判断
通过OR包裹两个array_contains条件,分别匹配包含'A'或包含'B'的记录:
const chosen = await prisma.table.findMany({ where: { OR: [ { groups: { array_contains: ['A'] } }, { groups: { array_contains: ['B'] } } ] }, select: { id: true } // 只返回id字段,减少数据传输 }) // 提取id列表 const idList = chosen.map(item => item.id); // 结果为[1,2,3,4,7]
方式二:使用原生SQL查询(适配PostgreSQL)
如果你的数据库是PostgreSQL,可以直接用Prisma的原生查询复用你原本的SQL逻辑:
const chosen = await prisma.$queryRaw` SELECT id FROM "table" WHERE (groups)::jsonb ?| array['A', 'B'] `; // 提取id列表 const idList = chosen.map(item => item.id);
内容的提问来源于stack exchange,提问作者Wanyn
相关产品推荐
相关产品推荐

