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

PostgreSQL string[]字段模糊匹配查询及Prisma实现求助

解决数组字段元素包含指定字符串的Prisma查询问题

你的问题核心是没正确处理string[]类型字段的元素匹配,同时当前语句还写错了字段名(用了constructionType而非目标字段landType),下面给两种可行的解决方案:

方案一:使用Prisma Client原生API(推荐)

Prisma支持直接对数组字段做元素匹配,用some关键字即可实现“数组中任意元素满足条件”的查询:

const targetLands = await prisma.land.findMany({
  where: {
    landType: {
      some: {
        contains: "N",
        // 可选:如果需要不区分大小写匹配,加上这行
        mode: "insensitive"
      }
    }
  }
});
  • some:指定数组中至少有一个元素符合后续条件
  • contains:检查元素是否包含指定的字符串"N"
  • mode: "insensitive":开启后会忽略大小写(比如匹配"n"或"N"),不需要可以直接删除

方案二:使用原生SQL查询($queryRaw)

如果你更习惯写原生SQL,需要先将数组展开(用unnest),再检查每个元素是否包含目标字符串:

const targetLands = await prisma.$queryRaw`
  SELECT * FROM "Land"
  WHERE EXISTS (
    SELECT 1 FROM unnest("landType") AS element
    WHERE element LIKE '%N%'
  );
  • unnest("landType"):将数组字段展开为多行数据
  • EXISTS子查询:只要展开后的元素中有一个包含"N",就返回对应的行
  • LIKE '%N%':模糊匹配包含"N"的元素,同样如果要忽略大小写可以用ILIKE替代LIKE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:30:54