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

MongoDB Atlas结合Apps Script仅返回1000条数据,如何获取全量记录?

解决MongoDB Atlas Data API返回记录数限制的问题

MongoDB Atlas Data API的find接口默认最多返回1000条记录,这就是你只拿到1000条数据的原因。要获取全部1100条记录,需要通过分页循环请求的方式分批获取所有数据。

具体实现步骤

  • 在请求payload中添加limit(单次请求最大条数,设为1000)和skip(跳过已获取的记录数)参数;
  • 添加稳定排序规则(比如按_id排序),避免分页时出现重复或遗漏;
  • 循环发送请求,直到某次返回的记录数小于limit,说明已获取全部数据。

修改后的完整代码

function fetchAllDocuments(filterObj) {
  var url = "https://us-east-1.aws.data.mongodb-api.com/app/data-wygci/endpoint/data/v1/action/find";
  var apiKey = "xxx";
  var authToken = "yyy";
  var headers = {
    "Content-Type": "application/json",
    "Access-Control-Request-Headers": "*",
    "api-key": apiKey,
    "Authorization": authToken,
  };

  const allDocuments = [];
  let skip = 0;
  const limit = 1000;

  while (true) {
    var payload = {
      "collection": "mycoll",
      "database": "mydata",
      "dataSource": "Cluster0",
      "filter": filterObj,
      "projection": {},
      "limit": limit,
      "skip": skip,
      "sort": { "_id": 1 } // 按_id稳定排序,避免分页重复/遗漏
    };

    var options = {
      method: "post",
      headers: headers,
      payload: JSON.stringify(payload),
      muteHttpExceptions: true
    };

    var response = UrlFetchApp.fetch(url, options);

    if (response.getResponseCode() !== 200) {
      Logger.log("Error: " + response.getResponseCode());
      Logger.log(response.getContentText());
      return false;
    }

    const result = JSON.parse(response.getContentText());
    const documents = result.documents;
    
    if (documents.length === 0) {
      break; // 无更多数据,退出循环
    }

    allDocuments.push(...documents);
    skip += documents.length;

    if (documents.length < limit) {
      break; // 本次返回不足limit,说明已取完所有数据
    }
  }

  Logger.log("Total documents fetched: " + allDocuments.length);
  return JSON.stringify({ documents: allDocuments });
}

关键说明

  • sort: { "_id": 1 }是核心:确保每次分页的记录顺序稳定,防止因数据变动或默认排序导致重复获取或遗漏记录;
  • 循环逻辑:每次请求跳过已获取的记录数,直到返回记录数小于1000或为空时停止;
  • 最终将所有记录合并为一个数组,返回格式与原接口一致,方便后续处理。

内容的提问来源于stack exchange,提问作者user1592380

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:03:30