用日期续写 Where 语句

新手上路,请多包涵

我使用 Sequelize 作为我的后端 ORM。现在我想对日期做一些 WHERE 操作。

更具体地说,我想获取日期从现在到 7 天前的所有数据。

问题是文档没有指定您可以在 Datatypes.DATE 上执行哪些操作

谁能指出我正确的方向?

原文由 Marc Rasmussen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 278
2 个回答

Just like Molda says, you can use $gt , $lt , $gte or $lte with a date:

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

如果您使用的是 Sequelize 的 v5,则必须包含 Op 因为密钥已移至 Symbol

 const { Op } = require('sequelize')

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

在此处查看更多续集文档

原文由 Evan Siroky 发布,翻译遵循 CC BY-SA 4.0 许可协议

我不得不从 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 并且根本不依赖于任何字符串别名。您可以通过设置 operatorsAliases 选项来限制您的应用程序需要的别名,请记住清理用户输入,尤其是当您将它们直接传递给 Sequelize 方法时。

原文由 James Graham 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏