【问题标题】:Using dates with sequelizejs to count orders made by customer this year使用带有 sequelizejs 的日期来计算客户今年的订单
【发布时间】:2016-02-01 12:56:35
【问题描述】:

我有一个 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 中也收到以下错误:

弃用警告:时刻构造回退到 js 日期。这是不鼓励的,将在即将发布的主要版本中删除。 请参考https://github.com/moment/moment/issues /1407 了解更多信息。参数:[object 对象]

【问题讨论】:

  • 这不是为了续集,但moment.js 你在你的应用程序中使用它吗?在哪里?怎么样?
  • 顺便说一句,您的sequelize 版本是什么?
  • 不,我根本不使用 moment.js。我认为这与 $like: '%' + 2016 + '%' 有关。续集版本 3.18.0
  • 除此警告外,您的代码是否有效?
  • 不,它每次都返回 0,它运行但应该为每个用户得到不同的答案,尽管一切都返回为 0

标签: javascript mysql node.js sequelize.js


【解决方案1】:

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']
  ]
})

【讨论】:

  • 谢谢你的工作就像一个魅力我可以问你一些事情。当我得到结果并且答案在结果 dataValues 对象中时,我正在返回它。 return result[0].dataValues['ordersThisYear'] 是访问它的唯一方法,还是有更短的写法
  • 我没有使用 Sequelize 但我看到有一个count() 方法,不要尝试将 SQL 查询转换为 sequelize,它会导致奇怪的事情。例如,为什么 $where 中有order_id: orderID?计数将始终为 0 或 1(我猜 order_id 是唯一的)。你试过这个吗:db.orders.count({ where: { customer_id: customerID, attempt_datetime: { $gte: moment(2016, 'YYYY').toDate(), $lt: moment(2017, 'YYYY').toDate() } } });?也许这会奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多