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

React中Appwrite集合文档批量下载仅获取26个的问题

解决Appwrite集合全量文档下载问题

问题根源是Appwrite的listDocuments接口默认采用分页机制,单次请求最多返回25条文档(可通过limit参数调整上限至100),你的代码仅获取了第一页数据,因此只能下载部分文档。要获取全部1000个文档,需要循环分页请求所有数据后再合并下载。

修改后的完整代码

import React from 'react';
import { Databases, Client } from 'appwrite';

const appwrite = new Client();
appwrite
    .setEndpoint('https://cloud.appwrite.io/v1')
    .setProject('your-project-id');

const database = new Databases(appwrite);
const DATABASE_ID = 'your-database-id';
const BATCH_LIMIT = 100; // 每次请求最大文档数,Appwrite允许上限为100

async function dumpCollection(collectionId) {
    try {
        let allDocuments = [];
        let offset = 0;
        let hasMoreDocuments = true;

        while (hasMoreDocuments) {
            // 分页请求文档
            const response = await database.listDocuments(
                DATABASE_ID,
                collectionId,
                [], // 查询条件,无需求则留空数组
                BATCH_LIMIT,
                offset
            );

            allDocuments = [...allDocuments, ...response.documents];
            offset += BATCH_LIMIT;

            // 判断是否还有剩余文档:返回数量小于请求的limit则代表已到最后一页
            hasMoreDocuments = response.documents.length === BATCH_LIMIT;
        }

        // 生成并下载JSON文件
        const json = JSON.stringify(allDocuments, null, 2);
        const blob = new Blob([json], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;
        link.download = `${collectionId}_full_dump.json`;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        URL.revokeObjectURL(url); // 释放临时URL,避免内存泄漏
    } catch (error) {
        console.error(`下载失败: ${error.message}`);
        alert(`下载失败,请查看控制台日志`);
    }
}

const App = () => {
    return (
        <button onClick={() => dumpCollection('your-collection-id')}>
            下载全部文档
        </button>
    );
}

export default App;

关键修改说明

  • 分页循环逻辑:通过offset(偏移量)和BATCH_LIMIT(单次请求数量)循环调用接口,逐步获取所有分页的文档数据。
  • 数据合并:将每一页返回的文档合并到同一个数组中,确保最终包含全部文档。
  • 资源清理:调用URL.revokeObjectURL(url)释放临时创建的URL对象,避免浏览器内存泄漏。
  • 错误提示:增加alert弹窗提示下载失败,提升用户感知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:20