如何使用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
相关产品推荐
相关产品推荐

