如果“过期”列小于当前日期,我一直试图在sqlite中删除记录。经过一些破解后,我能够使用存储库中的“删除”方法来完成此操作-这些破解是因为从我的阅读中可以看出,sqlite是如何工作的。这种方法的问题是我没有删除项目的列表,也没有删除项目的总数。我将在下面放置我当前的解决方案。
import { format } from "date-fns"
export const LessThanDate = (date: Date) => LessThan(format(date, "YYYY-MM-DD HH:MM:SS"))
const deletedResults = await this.accessTokenRepository.delete({
expires: LessThanDate(new Date())
})
以上内容确实删除了记录,但是我不知道它删除了什么以及有多少记录。
我真正想做的是使用“ createQueryBuilder”,我创建了一个简单的查询-选择,甚至没有删除,我的理解是,当选择生效时,我可以看到返回的记录数,然后它应该只是将select替换为delete-对吗?
const numToDelete = await this.accessTokenRepository
.createQueryBuilder()
.where("expires < :date", { date: new Date() })
.select()
.execute()
问题是他在上面的查询中返回0条记录。我认为它与我执行第一个查询的方式类似,而sqlite需要功能“ LessThan”,但我无法使其正常工作。
任何人都可以帮忙吗?
基本上,我每隔X个小时运行一次计划的作业,并删除所有分类为过期的记录。
我一直在调试查询,如果我使用了留给我的where子句
const numToDelete = await this.accessTokenRepository
.createQueryBuilder()
.select()
.execute()
果然,我得到了记录。我通过在type-orm.json文件中使用logging:true打开了对typeorm的日志记录,我看到了
query: SELECT "AccessTokenEntity"."jti" AS "AccessTokenEntity_jti", "AccessTokenEntity"."createdDate" AS "AccessTokenEntity_createdDate", "AccessTokenEntity"."expires" AS "AccessTokenEntity_expires", "AccessTokenEntity"."platformToken" AS "AccessTokenEntity_platformToken" FROM "access_token_entity" "AccessTokenEntity"
现在,再次启用where子句
query: SELECT "AccessTokenEntity"."jti" AS "AccessTokenEntity_jti", "AccessTokenEntity"."createdDate" AS "AccessTokenEntity_createdDate", "AccessTokenEntity"."expires" AS "AccessTokenEntity_expires", "AccessTokenEntity"."platformToken" AS "AccessTokenEntity_platformToken" FROM "access_token_entity" "AccessTokenEntity" WHERE expires < ? -- PARAMETERS: ["2019-05-05T06:31:46.672Z"]
不返回任何记录。我接受了上面的查询,并将其直接用作SQLite IDE中的查询(我使用vs代码打开sqlite文件)并直接执行。这是我在vs代码中针对SQLite使用的查询,并确保返回了足够的记录。
SELECT "AccessTokenEntity"."jti" AS "AccessTokenEntity_jti", "AccessTokenEntity"."createdDate" AS "AccessTokenEntity_createdDate", "AccessTokenEntity"."expires" AS "AccessTokenEntity_expires", "AccessTokenEntity"."platformToken" AS "AccessTokenEntity_platformToken"
FROM "access_token_entity" "AccessTokenEntity" WHERE expires < "2019-05-05T06:31:46.672Z"
我对下一步感到困惑:-(,有什么想法我做错了吗?
预先感谢