在 prisma 中循环替换查询
Posted
技术标签:
【中文标题】在 prisma 中循环替换查询【英文标题】:Replacing queries in a loop in prisma 【发布时间】:2021-10-21 08:28:26 【问题描述】:我有一个 API 端点需要获取 30 个项目的数据,它需要检查两个不同字段中的值以返回正确的字段。我正在使用 Prisma ORM。
在一个请求中,我得到一个对象数组,如下所示:
'6151': 12
,
其中key是part_num,value是color_id。我将键和值分成数组,并在循环中逐个查找每个元素:
const elements = [];
for (let i = 0; i < partNums.length; i++)
const element = await prisma.elements.findFirst(
where: AND: part_num: partNums[i], color_id: colors[i] ,
);
elements.push(element);
它似乎工作正常,但我读到对数据库进行多次查询是一种不好的做法,所以我的问题是:
有没有办法在一个查询中获得相同的结果?
我唯一的想法是仅通过其中一个字段获取所有元素,然后过滤掉我不需要的那些。但是,这首先需要从 db 中获取更多元素,并且过滤也需要一些时间。
【问题讨论】:
【参考方案1】:您可以使用单个 findMany
查询。您需要在循环中生成where
条件。它将是一组OR
条件,每个条件指定一个Element
记录。
这里有一些 cmets 的代码来解释它的作用
let findManyOrCondition = []; // each entry will contain a single part_nums, color_id condition pair.
for (let i = 0; i < partNums.length; i++)
// AND condition between part_num and color_id is implicit
findManyOrCondition.push(
part_num: partNums[i],
color_id: colors[i],
);
// fetch all of the elements with one query.
const elements = await prisma.elements.findMany(
where:
OR: findManyOrCondition,
,
);
【讨论】:
现在看起来很明显......这正是我想要的,谢谢! 欢迎,乐于助人:D以上是关于在 prisma 中循环替换查询的主要内容,如果未能解决你的问题,请参考以下文章
如何替换 snowflake.execute 语句中的循环结果?