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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:34