AWS AppSync добавляет несколько дочерних элементов в один родительский атрибут с помощью распознавателя проверки существования

У меня вопрос по AWS AppSync. Интересно, есть ли способ проверить существование при добавлении нескольких значений в один атрибут родительского элемента.

Итак, вот мой пример:

Это тип пользователя: Тип пользователя

Вот как выглядит Dynamodb: элемент Dynamodb

И вот чего я хочу добиться: добавить три программы в запись пользователя под атрибутом программ. мутация addProgramToUser

А вот мой текущий преобразователь: преобразователь addProgramToUser

Таким образом, моя логика состоит в том, чтобы сначала извлечь существующие программы из Dynamodb, а затем проверить, есть ли там идентификаторы программ, подлежащих добавлению. Если есть, остановите обновление или пропустите этот идентификатор программы. Если нет, продолжайте обновление. Итак, вопрос в том, как извлечь текущие данные с помощью VTL и как сравнить существующие и те, которые я хочу добавить.

Или, если у кого-то есть другое представление о том, как я могу выполнить эту задачу, пожалуйста, помогите. Огромное спасибо. Я не могу вставлять изображения, так как я новичок в stackoverflow. Приносим извинения за неудобства. Хорошего дня.


person Harrison Song    schedule 02.07.2018    source источник


Ответы (1)


Кажется, что вы можете использовать условие для шаблона сопоставления запросов вашего преобразователя. Выражение условия позволяет указать AWS AppSync и DynamoDB, должен ли запрос быть успешным или нет, в зависимости от состояния объекта, уже находящегося в DynamoDB, до выполнения операции. Например, в вашем случае вы хотите, чтобы запрос UpdateItem был успешным, только если в Dynamo еще нет идентификатора программы.

{
   "version" : "2017-02-28",
   "operation" : "PutItem",
   "key" : {
      "id" : { "S" : "1" }
   },
   "condition" : {
      "expression" : "attribute_not_exists(programId)"
   }
}
person Ionut Trestian    schedule 02.07.2018
comment
Большое спасибо, Лонут. Извините за задержку. Я пробовал attribute_not_exists (programId), но это не сработало. В моей ситуации я добавляю несколько идентификаторов программ. Я не знаю, будет ли работать это выражение условия. - person Harrison Song; 05.07.2018