sequelize ORM中的多次计数查询
Multiple count query in sequelize ORM
我想创建一个查询,它能够在 sequelize.js 中一次计算一个月中每一天的记录数
不喜欢 :
Record.count({ where: { createdAt: { $like: '2015-04-14%' } } }).then(function(c) {
console.log("2015-04-14 have been created" + c + "records");
});
Record.count({ where: { createdAt: { $like: '2015-04-15%' } } }).then(function(c) {
console.log("2015-04-15 have been created" + c + "records");
});
Record.count({ where: { createdAt: { $like: '2015-04-16%' } } }).then(function(c) {
console.log("2015-04-16 have been created" + c + "records");
});
....
....
我想查询一次 returns 行数,而不是像在 30 个查询中向数据库询问此数据。可以通过交易实现吗?
我会将它用于图表目的,因此最好的输出如下:
[500, 300, 400, 550....]
感谢您的帮助!
对于这种类型的查询,您可以使用带有分组的 postgresql date_trunc 函数:
db.record.findAll({
attributes: [
[
db.sequelize.fn('date_trunc',
'day',
db.sequelize.col('createdAt')
),
'dateTrunc'
],
[
db.sequelize.fn('count',
db.sequelize.col('id')
),
'count'
]
],
group: '"dateTrunc"'
}).then(function(rows) {
console.log(rows);
});
我的 PostgreSQL 原始查询解决方案:
db.sequelize
.query("SELECT count(*), date_trunc('month', \"createdAt\") AS date FROM tables WHERE active = true AND \"createdAt\" BETWEEN '"+moment().startOf('year').format()+"' AND '"+moment().format()+"' GROUP BY date")
.then(function(results){
res.json(results[0]);
});
希望对大家有所帮助。
我想创建一个查询,它能够在 sequelize.js 中一次计算一个月中每一天的记录数 不喜欢 :
Record.count({ where: { createdAt: { $like: '2015-04-14%' } } }).then(function(c) {
console.log("2015-04-14 have been created" + c + "records");
});
Record.count({ where: { createdAt: { $like: '2015-04-15%' } } }).then(function(c) {
console.log("2015-04-15 have been created" + c + "records");
});
Record.count({ where: { createdAt: { $like: '2015-04-16%' } } }).then(function(c) {
console.log("2015-04-16 have been created" + c + "records");
});
....
....
我想查询一次 returns 行数,而不是像在 30 个查询中向数据库询问此数据。可以通过交易实现吗?
我会将它用于图表目的,因此最好的输出如下:
[500, 300, 400, 550....]
感谢您的帮助!
对于这种类型的查询,您可以使用带有分组的 postgresql date_trunc 函数:
db.record.findAll({
attributes: [
[
db.sequelize.fn('date_trunc',
'day',
db.sequelize.col('createdAt')
),
'dateTrunc'
],
[
db.sequelize.fn('count',
db.sequelize.col('id')
),
'count'
]
],
group: '"dateTrunc"'
}).then(function(rows) {
console.log(rows);
});
我的 PostgreSQL 原始查询解决方案:
db.sequelize
.query("SELECT count(*), date_trunc('month', \"createdAt\") AS date FROM tables WHERE active = true AND \"createdAt\" BETWEEN '"+moment().startOf('year').format()+"' AND '"+moment().format()+"' GROUP BY date")
.then(function(results){
res.json(results[0]);
});
希望对大家有所帮助。