«Предоставленный ключевой элемент не соответствует схеме» при обновлении вложенного массива в DynamoDB - PullRequest
0 голосов
/ 06 октября 2018

У меня есть простое приложение React / Node, которое создает задачи, и я хотел бы иметь возможность добавлять заметки к каждой задаче.Я могу успешно добавлять и удалять задачи, но у меня возникают проблемы при добавлении новой заметки к задаче.

Моя схема базы данных в DynamoDB выглядит следующим образом:

{
"taskId": "e3b8d901-6d74-4caa-9360-5b2f7aaec513",
"notes": [
    {
        "noteId": "aeeeeb60-3221-4d4e-b362-d63b48f42fba",
        "text": "thing to do next and words",
        "status": "TODO"
    }
],
"title": "Some Task"

}

Вот как я пытаюсь добавить новую заметку в массив заметок:

function createNote(newNote){
  if (!newNote) {
    throw new Error('Missing newNote information')
  }
  return docClient.update({
    TableName: 'tasks',
    Key: {
      'taskId': newNote.taskId
    },
    UpdateExpression: 'SET #notes = list_append(#notes, :notes)',
    ExpressionAttributeNames: {
      '#notes': 'notes'
    },
    ExpressionAttributeValues: {
      ':notes': [
        {
          'noteId': uuid(),
          'text': newNote.text,
          'status': 'TEMP'
        }
      ]
    },
    ReturnValues: 'ALL_NEW'
  }).promise()
    .then((res) => {
      console.log('Task updated!', res)
      return res
    })
    .catch((error) => {
      console.log('Task not updated', error);
      throw error
    })
}

Когда я пытаюсь добавить новую заметку, я получаю сообщение об ошибке: «Предоставленный ключевой элемент несоответствовать схеме "

Мне пришла идея использовать list_append из этого поста здесь: Как обновить данные вложенного списка в DynamodB с помощью клиента документов

Изменить, чтобы добавить:Я также попытался прочитать документацию здесь, но я не понимаю, как пример (со всеми -) применяется к моему коду: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET.AddingListElements

Что-то не так с моим синтаксисом здесь?

Спасибо!

1 Ответ

0 голосов
/ 06 октября 2018

Оказалось, что у меня несоответствие в моем api.put и моей функции createNote.В api.put я передавал два параметра (идентификатор запроса и тело запроса), но CreateNote принимал только один параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...