Prisma:如何查找与ID列表匹配的所有元素?

38

我正在使用Prisma和NextJs。

在我的API中,我向后端发送一个数字列表,这些数字对应于数据库中对象的id。

例如,如果我收到列表[1, 2, 12],我希望返回其id为1、2或12的对象。

这是一个更复杂的查询的一部分(排序/计数/...),但我在第一步卡住了,即获取元素列表。

到目前为止,我有:

import { PrismaClient, Prisma } from '@prisma/client'

const prisma = new PrismaClient()


export default async function handler(req, res) {
    if (req.method !== 'POST') {
        res.status(400).send({ message: 'Only POST requests allowed for this route' })
    } else {
        const { signes_id } = req.query
        const signes_array = signes_id.split(",").map(function(item) {
            return parseInt(item)
        })
        console.log(signes_array)
        const ret = await prisma.signe.findMany({
            where: {
                id: Number(signes_array),
            }
        })
        res.status(200).send(ret)
    }
}

这并不起作用,因为Number期望的是一个int,而不是一个int数组。

我应该如何编写查询才能返回所需的对象数组?
还有,我应该如何处理不匹配的id?

1个回答

96
您可以使用in运算符在findMany中查询多个id。 示例:
 const ret = await prisma.signe.findMany({
            where: {
                id: { in: [1, 2, 12] },
            }
        })

更多细节可以在prisma客户端参考文档中找到。


这将过滤重复的帖子并将它们带回。如果您想将它们全部带回呢? - dontknowhy
@nounlace 只是想澄清一下,如果您有一个包含重复id值的id字段数组,并且希望通过findMany返回重复记录,您应该怎么做? - Tasin Ishmam
是的,完全正确。 - dontknowhy
1
@nounlace 嘿,抱歉回复晚了。目前使用单个Prisma查询无法实现这一点。我建议您在应用程序代码中获取没有重复的条目,然后将它们与重复项组织在一起。如果您为此提出单独的问题并链接它,我很乐意提供一个代码片段来展示如何完成这个任务。 - Tasin Ishmam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接