如何在Prisma的AND查询中嵌套OR(传递对象数组方式)
在Prisma的AND查询中嵌套OR逻辑的正确写法
你的代码存在两个关键问题,调整后就能实现「多组OR条件通过AND组合」的查询逻辑:
- 变量语法错误:字符串值必须加引号,否则会被识别为未定义变量,比如
berlin要写成'berlin'。 - AND条件结构错误:Prisma的
AND接收查询条件对象的数组,每组OR逻辑需要包装成独立对象,不能直接在数组里写OR:city这种键值对。
修正后的完整代码
// 修正变量的字符串引号问题 const city = [{ city: 'berlin' }, { city: 'newyork' }]; const brand = [{ brand: 'bmw' }, { brand: 'nissan' }]; const filter = async (_, { city, brand, model }) => { const ads = await Client.Ads.findMany({ where: { AND: [ // 每组OR条件作为AND数组的独立元素 { OR: city }, { OR: brand }, // 如果model需要添加类似逻辑,可按需扩展 ...(model ? [{ OR: model }] : []) ] } }); return ads; };
逻辑说明
AND数组中的每个对象代表一个必须满足的条件组- 每个条件组内的
OR数组,只要其中一个对象的条件匹配,该组即满足 - 最终实现:广告需同时满足「城市为柏林/纽约」且「品牌为宝马/日产」(若有model参数,可追加对应的OR条件组)
内容的提问来源于stack exchange,提问作者amghare
相关产品推荐
相关产品推荐

