如何在Prisma中基于字符串数组实现多值部分匹配查询?
如何用Prisma实现多值数组的部分匹配查询?
场景说明
传入的请求负载过滤条件:
filters: { "name": ["Joh", "Matt"] }
数据库存储的数据:
name ____ John Jane
需要实现数组中任意过滤值的部分匹配,即返回匹配"Joh"或"Matt"的记录(此场景下应返回John)。
此前针对单过滤值的写法如下,但不确定如何处理多值数组的情况:
name: { contains: filters.name, mode: "insensitive", }
解决方案
可以通过Prisma的OR操作符来实现,将数组中的每个过滤值转换为独立的contains匹配条件,组合成OR逻辑数组即可。
具体代码示例:
const result = await prisma.yourModelName.findMany({ where: { OR: filters.name.map(keyword => ({ name: { contains: keyword, mode: "insensitive" } })) } })
逻辑说明
- 通过
map遍历filters.name数组,把每个关键词转换成一个name模糊匹配的条件对象 OR操作符会让查询返回满足任意一个匹配条件的记录,正好符合"数组中任意值部分匹配"的需求- 此场景下,"Joh"会匹配到
John,而"Matt"无匹配结果,最终返回John
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

