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

如何在Prisma中实现MongoDB的TTL文档自动过期删除?

Prisma 实现 MongoDB TTL 自动删除过期令牌方案

Prisma 本身没有像 Mongoose 那样内置专门的 TTL 配置,但完全可以借助 MongoDB 原生的 TTL 索引机制来实现过期令牌自动删除的需求,具体有两种可行方式:

1. 手动在 MongoDB 中创建 TTL 索引

直接通过 MongoDB Shell 或可视化工具(如 Compass)连接数据库,针对 Token 集合的过期时间字段创建 TTL 索引。假设你的集合名为 tokens,过期时间字段为 expiresAt,执行以下命令:

db.tokens.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 })

这里 expireAfterSeconds: 0 表示以 expiresAt 字段存储的具体时间作为过期触发点,而非固定时长后过期。

2. 通过 Prisma Schema 配置生成 TTL 索引

在 Prisma Schema 中定义 Token 模型时,直接通过索引的 MongoDB 扩展参数配置 TTL 规则,这样在执行数据库同步命令时会自动创建对应的索引:

model Token {
  id        String   @id @default(auto()) @map("_id") @db.ObjectId
  token     String   @unique
  userId    String   @db.ObjectId
  expiresAt DateTime // 存储令牌的过期时间

  // 配置带TTL的索引
  @@index([expiresAt], map: "expiresAt_ttl", db: { expireAfterSeconds: 0 })
}

配置完成后,运行 prisma db push(无迁移需求时)或 prisma migrate dev(需要生成迁移文件时),Prisma 会自动在 MongoDB 中创建该 TTL 索引。

关键注意事项

  • 确保 expiresAt 字段存储的是未来的日期时间,MongoDB 的 TTL 后台进程会定期(默认每分钟一次)扫描并删除过期文档,删除操作存在轻微延迟属于正常现象。
  • 可以通过 db.tokens.getIndexes() 命令验证 TTL 索引是否成功创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:25:41