概要
AWS AppSync + DynamoDB構成で、Filterを使用してデータを取得する際の注意点。
注意点
前提
DynamoDBの1 回のScanリクエストで、取得出来る最大サイズは1 MBのデータ。
DynamoDB でのスキャンの操作 - Amazon DynamoDB
AppSync(GraphQL)のFilterで取得条件を絞り込んでデータを取得している。
AppSync(GraphQL)のScanのlimitのデフォルトが20のため、limitに最大値を設定して最大サイズのデータを取得している。
結論
Filterで取得出来るデータは、条件に一致したデータで1MBではなく、1MBでScanしたデータの内条件に一致したデータである。
再帰処理でデータを取得するサンプル
listの操作を行うクエリの定義名は、listTestsとする。
let sampleList = []; const fetchList = async (token) => { const appSyncParams = { filter: { 条件を記載 }, limit: 999999999 }; if (token) appSyncParams.nextToken = token; const res = await API.graphql(graphqlOperation(queries.listTests, appSyncParams)); Array.prototype.push.apply(sampleList, res.data.listTests.items); if (!res.data.listTests.nextToken) return; await fetchList(res.data.listTests.nextToken); } await fetchList('');