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

Prisma中使用变量匹配JSON类型字段的findMany查询问题

Prisma JSON字段变量匹配解决方案

可行解决方法

1. 确保变量类型严格匹配

先确认目标变量为字符串类型,避免隐式类型转换导致匹配失效,可显式转换:

const findthis = String("19999999999");
const findMatch = await prisma.Test.findMany({
  where: {
    OR: [
      { Phone_Numbers: { path: ["primaryPhone"], equals: findthis } },
      { Phone_Numbers: { path: ["SecondaryPhone"], equals: findthis } }
    ]
  },
  select: { id: true }
});

2. 提前构建查询条件对象

将OR条件抽离为独立变量,避免Prisma对对象字面量的解析问题:

const findthis = "19999999999";
const phoneMatchConditions = [
  { Phone_Numbers: { path: ["primaryPhone"], equals: findthis } },
  { Phone_Numbers: { path: ["SecondaryPhone"], equals: findthis } }
];
const findMatch = await prisma.Test.findMany({
  where: { OR: phoneMatchConditions },
  select: { id: true }
});

3. 使用原生SQL查询(适配不同数据库)

绕过ORM的JSON处理逻辑,直接用原生SQL实现匹配:

PostgreSQL示例

const findthis = "19999999999";
const findMatch = await prisma.$queryRaw`
  SELECT id FROM "Test" 
  WHERE "Phone_Numbers"->>'primaryPhone' = ${findthis} 
  OR "Phone_Numbers"->>'SecondaryPhone' = ${findthis}
`;

MySQL示例

const findthis = "19999999999";
const findMatch = await prisma.$queryRaw`
  SELECT id FROM Test 
  WHERE JSON_UNQUOTE(JSON_EXTRACT(Phone_Numbers, '$.primaryPhone')) = ${findthis}
  OR JSON_UNQUOTE(JSON_EXTRACT(Phone_Numbers, '$.SecondaryPhone')) = ${findthis}
`;

4. 升级Prisma版本

旧版本Prisma在JSON字段变量匹配上可能存在bug,升级到最新稳定版(如5.x系列)可解决此类兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:17:32