Node.js中Sequelize Sum聚合函数查询:如何一次统计活跃与非活跃用户
获取所有活跃与非活跃用户的Sequelize查询方案
别担心,这事儿其实挺简单的!要一次性拉取所有活跃和非活跃状态的用户数据,核心思路就是不对用户状态做过滤,或者明确指定包含两种状态,下面给你几种具体实现方式:
1. 最基础的写法(直接获取全部用户)
Sequelize的findAll()方法默认会返回数据表中的所有记录,所以如果你没有额外加where条件,直接就能拿到所有活跃+非活跃的用户:
// 假设你的用户模型叫做 User const allUsers = await User.findAll(); // 返回的 allUsers 数组里会包含所有状态的用户
2. 明确指定包含两种状态(避免默认过滤干扰)
如果你的模型或者全局配置里不小心加了默认的活跃状态过滤,或者你想让代码逻辑更清晰,可以用Sequelize的Op.in操作符,明确指定要匹配true和false两种状态:
首先要先导入操作符:
const { Op } = require('sequelize');
然后编写查询:
const allUsers = await User.findAll({ where: { isActive: { [Op.in]: [true, false] } } });
3. 分组统计活跃/非活跃用户数量(可选)
要是你不仅想获取所有用户,还想同时统计两类用户的数量,可以用聚合函数配合分组查询:
// 记得先导入 sequelize 实例 const { sequelize } = require('./your-sequelize-setup-file'); const userStatusSummary = await User.findAll({ attributes: [ 'isActive', // 使用 COUNT 函数统计每组的用户数量 [sequelize.fn('COUNT', sequelize.col('id')), 'totalUsers'] ], // 按 isActive 字段分组 group: ['isActive'] }); // 返回结果示例: // [ // { isActive: true, totalUsers: 85 }, // { isActive: false, totalUsers: 12 } // ]
其实你之前可能是不小心在查询里加了where: { isActive: true }这类过滤条件,去掉或者改成上面的写法就能拿到所有用户啦。
内容的提问来源于stack exchange,提问作者Vikas
相关产品推荐
相关产品推荐

