You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma+JS如何直接查询早于1小时的记录 无需后置过滤

Prisma 直接查询早于1小时的时间字段记录实现方案

你当前采用先查询全量匹配基础条件的记录、再在内存中用filter过滤过期数据的方式,在表数据量较大时会产生不必要的性能开销,完全可以通过Prisma原生的查询条件在数据库层直接完成过滤,无需后置处理。

核心实现逻辑

直接计算出当前时间往前推1小时的时间阈值,在where条件中通过Prisma内置的时间比较操作符做筛选即可:

  • 同层级查询条件默认是AND关系,无需额外包裹AND数组
  • 用lt(less than,小于)操作符匹配reservedAt早于阈值的记录
  • Prisma会自动处理JS Date对象和数据库时间类型的转换,生成对应数据库适配的SQL

最终查询代码

// 生成1小时前的时间阈值
const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);

const expiredReservation = await prisma.collectionIndexes.findMany({
  where: {
    collectionId: dbCollection.id,
    submitedTx: null,
    reservedAt: {
      lt: oneHourAgo
    }
  },
  orderBy: {
    reservedAt: 'asc'
  }
})

逻辑等价说明

这个写法和你原有内存过滤的逻辑完全一致:
原有判断逻辑addHours(r.reservedAt, 1).getTime() < new Date().getTime(),等价于r.reservedAt.getTime() < Date.now() - 1*60*60*1000,和数据库层的reservedAt < oneHourAgo判断完全匹配,不会出现结果偏差。

内容的提问来源于stack exchange,提问作者dzCodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:09:24