使用带有 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']
]
})
我有这个 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']
]
})