在DynamoDB中更新嵌套数组时,“提供的键元素与架构不匹配”

时间:2018-10-05 22:55:38

标签: javascript node.js amazon-dynamodb

我有一个简单的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"

}

这是我尝试向notes数组添加新注释的方式:

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的想法:How do I update nested list data in dynamodb using document client

编辑以添加:我也尝试过阅读这里的文档,但是我不明白该示例(带有所有-的示例)如何适用于我的代码:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET.AddingListElements

我的语法是否有问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

原来,我的api.put和createNote函数不匹配。在api.put中,我传递了两个参数(查询ID和请求正文),但是CreateNote仅接受一个参数。