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
相关产品推荐
相关产品推荐

