Как выполнить сравнение дат с Postgres с Sequelize - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу удалить все записи с датами до 20 минут назад.Postgres (или Sequelize) не устраивает пустой объект javascript Date, который я предоставляю в качестве значения для сравнения.

Я использую sequelize 4.37 поверх базы данных postgres 9.6.

рассматриваемый столбец был объявлен с type: Sequelize.DATE, что, как показывают исследования, эквивалентно TIMESTAMP WITH TIME ZONE: полная дата и время с точностью до микросекунды и указатель часового пояса.(Это также то, что я вижу, когда использую инструмент CLI psql для описания таблицы.)

Итак, я делаю это:

const Sequelize = require('sequelize')
const { SomeModel } = require('../models.js')

// calculate 20 minutes ago
async function deleteStuff() {
  const deletionCutoff = new Date()
  deletionCutoff.setMinutes( deletionCutoff.getMinutes() - 20 ) 

  await SomeModel.destroy({
    where: {
      [ Sequelize.Op.lt ]: { dateColumn: deletionCutoff }
    }
  })

Но я получаю эту ошибку:

Error: Invalid value { dateColumn: 2018-11-21T21:26:16.849Z }

Документы предполагают, что я должен иметь возможность предоставить либо чистую дату JavaScript, либо строку ISO8601, но оба выдают одну и ту же ошибку Invalid Value.Разница лишь в том, что, если я передаю строку, ошибка показывает одинарные кавычки вокруг значения:

// error when dateColumn: deletionCutoff.toISOString()
Error: Invalid value { dateColumn: '2018-11-21T21:26:16.849Z' }

1 Ответ

0 голосов
/ 22 ноября 2018

Ну, это довольно неловко.Я неправильно структурировал предложение where.

// BAD CODE
await SomeModel.destroy({
  where: {
    [ Sequelize.Op.lt ]: {
      dateColumn: deletionCutoff
    }
  }
})


// GOOD CODE
await SomeModel.destroy({
  where: {
    dateColumn: {
      [ Sequelize.Op.lt ]: deletionCutoff
    }
  }
})

Возможно, мне следует удалить вопрос.Возможно нет - ошибка, которую я получил, вероятно, могла бы быть более полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...