You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:55:39