我有一个简单的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
我的语法是否有问题?
谢谢!
答案 0 :(得分:0)
原来,我的api.put和createNote函数不匹配。在api.put中,我传递了两个参数(查询ID和请求正文),但是CreateNote仅接受一个参数。