Sequelize Где выражение с датой

Я использую sequelize как мой backend ORM. Теперь я хочу сделать некоторые операции с датой.

Подробнее Я хочу получить все данные, где дата сейчас и 7 дней назад.

Проблема заключается в том, что в документации не указано, какие операции вы можете выполнять на Datatypes.DATE

Может ли кто-нибудь указать мне в правильном направлении?

Ответ 1

Как и Молда, вы можете использовать $gt, $lt, $gte или $lte с датой:

model.findAll({
  where: {
    start_datetime: {
      $gte: moment().subtract(7, 'days').toDate()
    }
  }
})

Ответ 2

Мне пришлось импортировать символы операторов из sequelize и использовать так.

const { Op } = require('sequelize')

model.findAll({
  where: {
    start_datetime: {
      [Op.gte]: moment().subtract(7, 'days').toDate()
    }
  }
})

Согласно документам, по соображениям безопасности это считается наилучшей практикой.

См. Http://docs.sequelizejs.com/manual/tutorial/querying.html для получения дополнительной информации.

Использование Sequelize без псевдонимов повышает безопасность. Некоторые фреймворки автоматически анализируют пользовательский ввод в js-объектах, и если вам не удастся санировать входные данные, возможно, можно ввести объект с помощью строковых операторов для Sequelize.

(...)

Для большей безопасности настоятельно рекомендуется использовать Sequelize.Op и не зависеть ни от какого псевдонима строки. Вы можете ограничить псевдоним, в котором будет нуждаться ваше приложение, установив опцию operatorAliases, не забывайте дезинфицировать пользовательский ввод, особенно когда вы непосредственно передаете их методам Sequelize.

Ответ 3

Вы также можете использовать Sequelize.literal() для выполнения манипулирования датами в SQL.

Следующий код работает с Postgres, но я уверен, что нечто подобное может быть сделано и в других системах:

model.findAll({
  where: {
    start_datetime: {
      $gte: Sequelize.literal('NOW() - INTERVAL "7d"'),
    }
  }
})