我怎么能在 sequelize 中写这个查询?

How could I write this query in sequelize?

考虑以下查询:

SELECT Film.FilmId FROM Films WHERE NOW() BETWEEN Film.StartDate AND Film.EndDate

这个查询怎么写成sequelize的?我知道使用 sequelize.fn('now') 我应该能够获得 NOW() mariadb 函数,但是我应该如何告诉 sequelize 使用它作为 where 子句的左操作数?

这是一个解决方法。

Film.findOne({
attributes: ['FilmId'],
where: {
    [Op.and]: [
        {
            StartDate: {
                [Op.lte]: sequelize.literal('NOW()')
            }
        },
        {
            EndDate: {
                [Op.gte]: sequelize.literal('NOW()')
            }
        }
    ]
}
});

使用 sequelize.where() 使用 sequelize.fn('NOW') 生成条件,然后使用 Op.between query operator,传入 Film.StartDateFilm.EndDate 的列。

有关详细信息,请参阅文档中的 Advanced queries with functions (not just columns)

// get the Op query operators
const { Op } = require("sequelize");

// ... your code

// use await to find one Film, in an async function
const film = await Film.findOne({
  // just fetch the Film.FilmId
  attributes: ['FilmId'],
  where: {
    // create where condition for NOW()
    sequelize.where(sequelize.fn('NOW'), {
      // BETWEEN Film.StartDate AND Film.EndDate
      [Op.between]: [
        sequelize.col('Film.StartDate'), 
        sequelize.col('Film.EndDate')
      ],
    }),
  },
});