Я пытался удалить записи в sqlite, если столбец с истекшим сроком меньше текущей даты.Я смог сделать это с помощью метода «delete» в репозитории после некоторых взломов - эти взломы объясняются тем, как я читал, как работает 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", я создал простой запрос - выберите, а не удалить, я понимаю, что когда я получаю работу выбора и я могу видеть количество возвращаемых записей, это должен быть случай просто замены выборас удалением - верно?
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()
Конечно, я получаю записи обратно.Я включил ведение журнала для typeorm через logging: true внутри файла type-orm.json, и я вижу
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) и выполняю напрямую.Вот запрос, который я использовал в коде против 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"
Я запутался в своем следующем шаге :-(, есть идеи, что я делаю неправильно?
Заранее спасибо