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

时间:2016-02-01 12:56:35

标签: javascript mysql node.js sequelize.js

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

  

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

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我仍然无法发表评论所以我必须写一个答案....

回应

  

谢谢你的工作就像一个魅力我可以问你一些事情。当我得到结果>返回并且答案在结果dataValues对象中时我将返回它。是>返回结果[0] .dataValues [' ordersThisYear']是访问它的唯一方法,或者是>有更短的写作方式

你可以简单地调用result [0] .ordersThisYear