使用带有 sequelizejs 的日期来计算客户今年的订单

Using dates with sequelizejs to count orders made by customer this year

我有这个 MySQL 查询来计算客户今年的订单数量:

SELECT COUNT(order_id) FROM orders where year(order_datetime) = year(curdate()) and customer_id = 51;

我在尝试将同一查询转换为使用 sequelize 时遇到了一些困难。使用此代码,我为所有用户返回 0:

 db.orders.findAll({
    where: {
        order_id: orderID,
        attempt_datetime: {
            $like: '%' + 2016 + '%'
        }
    },
    attributes: [[sequelize.fn('COUNT', sequelize.col('order_id')), 'ordersThisYear']]
}).then(function (result) {
    console.log('THIS YEARs ORDERS',  result);
}, function (e) {
    console.log(e);
});

我在 webstorm 中也收到以下错误:

Deprecation warning: moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues /1407 for more info. Arguments: [object Object]

Sequelize 使用时刻来操纵日期。您可能将 attempt_datetime 定义为日期字段,因此 %2016% 被解析为 2016-01-01 00:00:00 日期。您应该使用 $gte/$lt 运算符,而不是 $like,来处理日期范围,您可以为此使用 momentjs:

var moment = require('moment');

db.orders.findAll({
  where: {
    order_id: orderID,
    attempt_datetime: {
      $gte: moment(2016, 'YYYY').toDate(),
      $lt: moment(2017, 'YYYY').toDate()
    }
  },
  attributes: [
    [sequelize.fn('COUNT', sequelize.col('order_id')), 'ordersThisYear']
  ]
})