Sequelize Where语句

时间:2015-04-22 12:59:37

标签: javascript node.js sequelize.js

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

更多Speceficly我想获得所有数据,其中的日期是从现在开始和7天后。

问题是文档没有指定您可以对Datatypes.DATE

执行哪些操作

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:30)

就像Molda所说,你可以使用$gt$lt$gte$lte来表示日期:

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

答案 1 :(得分:24)

我必须从sequelize中导入Operators符号并使用它。

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对象,如果没有   清理您的输入可能会注入一个Object   字符串运算符到Sequelize。

     

(...)

     

为了更好的安全性,强烈建议使用Sequelize.Op而不是   依赖于任何字符串别名。你可以限制你的别名   应用程序将需要通过设置operatorAliases选项,记住   清理用户输入,尤其是在直接传递给用户时   续集方法。

答案 2 :(得分:1)

此解决方案是没有 moment.js库。

在7天之前和现在之间

const sevenDaysAgo = new Date(new Date().setDate(new Date().getDate() - 7));
models.instagram.findAll({
  where: {
    my_date: {
      $gt: sevenDaysAgo,
      $lt: new Date(),
    },
  },
});

从现在到现在的7点之间

const sevenDaysFromNow = new Date(new Date().setDate(new Date().getDate() + 7));
models.instagram.findAll({
  where: {
    my_date: {
      $gt: new Date(),
      $lt: sevenDaysFromNow,
    },
  },
});

注意:

  • $gt代表“大于”。您可以使用$gte代替$gt$gte代表“大于或等于”。当然$lte也一样。
  • 从技术上讲,您需要同时使用$lt$gt来确保日期不是将来的日期(按原始问题)。
  • 其他答案显示使用[Sequelize.Op.gt]代替$gt。如果在Sequelize v5上使用它。

答案 3 :(得分:0)

您还可以使用<form action=" {{url_for('add_site') }}" method="POST"> <div class="form-group{% if form.site_name.errors %} has-error{% endif %}"> {{ form.site_name.label(for_='site_name') }} {{ form.site_name(class='form-control') }} {% if form.site_name.errors %} <span class="help-block">{{ form.site_name.errors[0] }}</span> {% endif %} </div> <div class="form-group{% if form.organisation.errors %} has-error{% endif %}"> {{ form.organisation.label }} {{ form.organisation(class='form-control') }} </div> {{ form.csrf_token }} {{ form.submit(class='btn btn-default', value='Add Site') }} </form> 在SQL中执行日期操作。

以下代码可与Postgres一起使用,但我确信在其他系统中也可以完成类似的操作:

Sequelize.literal()