2

116 個のアイテムがあるにもかかわらず、VTL 応答テンプレートでループを返そうとすると#foreach、101 個を超えるアイテムは返されません。テストのために、2 つのフィールドを作成itemsitemCount、同じ ES クエリを実行しました。

の VTL 応答マッピングitems:

[
  #foreach($entry in $context.result)
    #if( $velocityCount > 1 ) , #end
    $util.toJson($entry.get("_source"))
  #end
]

の VTL 応答マッピングitemCount:

$context.result.size()

appsync による foreach ループに制限が設定されているようです (参照: http://people.apache.org/~henning/velocity/html/ch05s04.html )。

4

2 に答える 2

0

directive.foreach.maxloops = 1000AppSync と API Gateway によって設定された任意の速度制限を回避する 1 つの方法はforeach、1000 のバケットに分割してループを分割することです。実際の例を次に示します。

## Partition to get around foreach iteration limit
#set($partition_size = 1000)
#set($max_partition_index = $list.size()/$partition_size)
#foreach($partition_index in [0..$max_partition_index])
  #set($start_index = $partition_index * $partition_size)
  #if($partition_index == $max_partition_index)
    ## Last partition
    #set($end_index = $list.size() - 1)
  #else
    #set($end_index = (($partition_index + 1) * $partition_size) - 1)
  #end

  #foreach($index in [$start_index..$end_index])
    #if($index != 0),#end
    "$list[$index].S"
  #end
#end
于 2022-02-25T05:10:47.077 に答える