首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果过期(根据日期)使用查询生成器删除数据库条目

如果过期(根据日期)使用查询生成器删除数据库条目
EN

Stack Overflow用户
提问于 2020-01-11 12:40:57
回答 1查看 4K关注 0票数 1

我想从已经过期的数据库中删除所有失效的json令牌。我正在使用TypeORM,我认为我必须为此使用查询生成器。

我的令牌实体有一个列,表示令牌过期的时间。

代码语言:javascript
运行
复制
  @Column()
  public expiresOn: Date;

我想要设置一个cronjob,从数据库中删除所有过期的令牌。所以我现在拥有的是

代码语言:javascript
运行
复制
  @Interval(2000) // gets called every 2 seconds - for demo purposes
  public async handleInterval(): Promise<void> {
    const currentDate: Date = new Date();

    const deleteExpiredTokensQuery: SelectQueryBuilder<Token> = this.tokensRepository.createQueryBuilder('token');
    deleteExpiredTokensQuery.where('token.expiresOn <= :currentDate', { currentDate });

    await deleteExpiredTokensQuery.delete();
  }

不幸的是,没有任何令牌被删除,尽管令牌在

代码语言:javascript
运行
复制
1970-01-19 07:32:20.093

那么如何修复我的查询呢?我想简单的问题是

代码语言:javascript
运行
复制
DELETE FROM tokens WHERE expiresOn < GETDATE()

更新

我想我必须创建一个delete查询生成器

代码语言:javascript
运行
复制
const deleteExpiredTokensQuery: DeleteQueryBuilder<Token> = this.tokensRepository.createQueryBuilder('token');

但是我得到了这个错误

类型'SelectQueryBuilder‘缺少’DeleteQueryBuilder‘类型中的下列属性: output,返回,createDeleteExpression

EN

Stack Overflow用户

发布于 2020-01-11 13:23:42

通过在delete()上调用QueryBuilder,它只将此查询声明为删除。要执行查询,必须调用execute()。见删除文档

代码语言:javascript
运行
复制
await this.tokensRepository
    .createQueryBuilder('token')
    .delete()
    .where('token.expiresOn <= :currentDate', { currentDate })
    .execute();

关于第二个问题:您不必显式地指定变量的类型,因为它是自动推断的。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59694478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档