Appsync VTL предел цикла foreach 101
Когда я пытаюсь вернуть #foreach
цикл в шаблоне ответа VTL, хотя у меня 116 элементов, он никогда не возвращает больше 101. Для тестирования я создал два поля items
а также itemCount
и запустил тот же запрос ES.
Отображение ответов VTL для items
:
[
#foreach($entry in $context.result)
#if( $velocityCount > 1 ) , #end
$util.toJson($entry.get("_source"))
#end
]
Отображение ответов VTL для itemCount
:
$context.result.size()
Похоже, что существует ограничение, установленное для цикла foreach с помощью appsync (ссылка: http://people.apache.org/~henning/velocity/html/ch05s04.html).
2 ответа
Мы только что обновили этот предел до 1000, который обновляется на странице ограничений AppSync.
Один из способов обойти произвольную скорость
directive.foreach.maxloops = 1000
ограничение, установленное AppSync и API Gateway, состоит в том, чтобы
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