node.js sequelize 如何返回多个汇总结果

node.js+sequelize+sqlite

img

findAll中如何一次返回'审核中','审核通过,'审核未过',及全部多个汇总结果

可以使用 Sequelize 的 aggregate 函数,通过 COUNT() 函数对指定字段进行聚合,从而得到审核状态的数量统计信息。具体实现参考下面的示例代码:

const { Sequelize, Model, DataTypes } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'sqlite',
  storage: 'database.sqlite'
});

class Item extends Model {}
Item.init({
  name: DataTypes.STRING,
  status: DataTypes.STRING
}, { sequelize, modelName: 'item' });

(async () => {
  // 添加测试数据
  await sequelize.sync();
  await Item.create({ name: 'foo', status: '审核中' });
  await Item.create({ name: 'bar', status: '审核通过' });
  await Item.create({ name: 'baz', status: '审核未过' });
  await Item.create({ name: 'qux', status: '审核通过' });

  // 查询审核状态统计信息
  const result = await Item.findAll({
    attributes: [
      'status',
      [Sequelize.fn('COUNT', Sequelize.col('*')), 'count']
    ],
    group: 'status'
  });
  console.log(result);
})();

以上代码演示了如何使用 Sequelize 操作 SQLite 数据库进行查询,具体步骤如下:

  1. 根据需要统计的字段用 Sequelize.fn() 创建计算表达式,这里使用 COUNT() 函数进行聚合;
  2. 在查询中使用 Sequelize.col() 引用表中的字段;
  3. 通过 group 参数指定按照什么字段进行分组统计。

查询结果将返回一个数组,其中每个元素是一个包含统计信息的对象,例如:

[
  { status: '审核中', count: 1 },
  { status: '审核通过', count: 2 },
  { status: '审核未过', count: 1 }
]

如果需要查询所有审核状态的信息,在查询中不用指定 group 参数即可,例如:

const result = await Item.findAll({
  attributes: [
    'status',
    [Sequelize.fn('COUNT', Sequelize.col('*')), 'count']
  ]
});
console.log(result);

以上查询结果将返回所有结果的审核统计信息,包括总数。