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
相关产品推荐
相关产品推荐

