假设我的 PostgreSQL 数据库中有数百万条语句,但我只想获取其中的 10000 条。但不是前 10000 个,而是随机选择 10000 个(如果我也可以选择逻辑,例如选择每 4 个语句,那就最好了)。
我如何使用 Prisma 来做到这一点,或者——如果无法使用 Prisma——使用一个好的旧 PostgreSQL 请求?
目前,我使用此代码来限制我获得的结果数量:
const statements = await this.prisma.statement.findMany({
where: {
OR: conditions,
},
orderBy: {
createdAt: 'asc',
},
take: 10000,
});
这将使用我拥有的条件,然后按升序对它们进行排序,并“取”或限制前 10000 个结果。
我可以使用什么来代替“take”,或者我可以直接在 PostgreSQL 中提出什么请求来随机抽取我的数据库记录?
重申 Nurul 的回应,Prisma 不支持这一点。
如果您有一些自动递增的字段(例如
id
),您可能会生成一个随机选择的 id 数组,然后查询这些字段。对于 100,000 或 1,000,000 的较大样本来说,这可能并不理想,但在 100 到 10,000 的情况下,我认为这可能是一个可行的后备解决方案,直到支持功能
const idsArray = [5, 9, 13, 2, 18]; // Random array of IDs
const statements = await this.prisma.statement.findMany({
where: {
id: {
in: idsArray,
},
},
});