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

如何使用listDocuments接口分页获取Appwrite数据库的全部文档

全量拉取Appwrite集合文档的实现方法

因为listDocuments接口单次limit最大只能设为100,你可以通过分页循环拉取的方式获取全量文档,有两种常用实现方案:

方案1:Offset分页(适合数据量<1000条的场景)

通过调整offset参数实现分页,代码简单易读:

const sdk = new Appwrite();

sdk
    .setEndpoint('https://[HOSTNAME_OR_IP]/v1') // 替换为你的API端点
    .setProject('5df5acd0d48c2') // 替换为你的项目ID
;

async function getAllDocuments(collectionId) {
    const allDocs = [];
    let offset = 0;
    const pageSize = 100;

    while(true) {
        const res = await sdk.database.listDocuments(collectionId, [], pageSize, offset);
        allDocs.push(...res.documents);
        if(res.documents.length < pageSize) break;
        offset += pageSize;
    }

    return allDocs;
}

// 调用示例
getAllDocuments('[你的集合ID]')
    .then(docs => console.log('全量文档:', docs))
    .catch(err => console.error('拉取失败:', err));

方案2:游标分页(适合数据量较大的场景)

如果集合数据超过1000条,offset分页性能会明显下降,推荐用cursor游标分页,性能更稳定:

async function getAllDocumentsByCursor(collectionId) {
    const allDocs = [];
    const pageSize = 100;
    let lastDocId = null;

    while(true) {
        const res = await sdk.database.listDocuments(
            collectionId,
            [],
            pageSize,
            0,
            lastDocId
        );
        allDocs.push(...res.documents);
        if(res.documents.length < pageSize) break;
        lastDocId = res.documents.at(-1).$id;
    }

    return allDocs;
}

补充说明

  • 如果需要附加筛选、排序条件,直接把规则填入listDocuments的第二个参数数组即可,分页逻辑无需修改
  • 两种方案都兼容Appwrite 0.15及以上的所有版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:18:02