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

希望对大家有所帮助。