node.js+sequelize+sqlite
findAll中如何一次返回'审核中','审核通过,'审核未过',及全部多个汇总结果
node.js+sequelize+sqlite
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 数据库进行查询,具体步骤如下:
Sequelize.fn()
创建计算表达式,这里使用 COUNT()
函数进行聚合;Sequelize.col()
引用表中的字段;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);
以上查询结果将返回所有结果的审核统计信息,包括总数。