TypeORM (nestjs): удалить документы SQLite по дате, используя createQueryBuilder? - PullRequest
0 голосов
/ 05 мая 2019

Я пытался удалить записи в 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"

Я запутался в своем следующем шаге :-(, есть идеи, что я делаю неправильно?

Заранее спасибо

...