Sequelize连接Oracle时findAndCountAll返回行数受限求助
Sequelize连接Oracle调用findAndCountAll仅返回1000行的问题解决
问题描述
我有一张包含4750行数据的表,使用Sequelize连接Oracle数据库时,调用findAndCountAll()方法,即使设置limit为2200,仍仅返回1000行数据。请问是否存在相关配置,可通过单次请求返回全部4750行数据?
API中的GET请求代码如下:
const { count, rows } = await User.findAndCountAll({ offset: 1, raw: true, limit: 2200, subQuery: false });
收到的findAndCountAll响应JSON如下:
{ "count": 4750, "rows": [ { "id": "10003734", "name": "LUIS" }, { "id": "10003735", "name": "PEDRO" }, { "id": "10003736", "name": "CARLOS" } ....997 rows more ] }
问题原因
这是因为Sequelize依赖的oracledb驱动默认有一个maxRows配置,默认值为1000,它会限制单次查询返回的行数上限,即使你在findAndCountAll里设置了更大的limit也会被这个配置覆盖。
解决方案
1. 配置驱动的maxRows参数
在创建Sequelize实例时,通过dialectOptions设置maxRows为足够大的值(比如你需要的4750,或更大的数值):
const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'oracle', dialectOptions: { maxRows: 4750 // 按需设置,或设为10000等更大值 } });
2. 取消行数限制(返回全部数据)
如果需要单次返回所有数据,可将maxRows设为0(oracledb中0表示不限制行数),同时去掉findAndCountAll中的limit参数(或设为null):
// Sequelize实例配置 const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'oracle', dialectOptions: { maxRows: 0 // 不限制返回行数 } }); // 查询代码 const { count, rows } = await User.findAndCountAll({ offset: 1, raw: true, subQuery: false });
注意事项
- 若表数据量未来可能增长,建议将
maxRows设为足够大的安全值,或直接设为0。 - 单次返回大量数据需考虑内存占用问题,数据量过大时,分页查询仍是更稳妥的方案。
内容的提问来源于stack exchange,提问作者Kevin Montañez Huamán
相关产品推荐
相关产品推荐

