阅读docs时,他们说我可以在列表中添加一个元素,但是我正在尝试,并且它一直在向文档添加新项,其键为arrayName[index]
,如下所示:
我正在尝试以下查询:
await documentClient.transactWrite({
TransactItems: [{
Update: {
TableName: recordsTable,
Key: { id: selectedRec.id },
UpdateExpression: 'SET #k1 = :v1',
ExpressionAttributeNames: {
'#k1': `occurrences[${idx}]`, // idx = 245
},
ExpressionAttributeValues: {
':v1': selectedOccurrence, // a map object
},
}
}, {
// another query irrelevant to problem
}]
}).promise();
这是本文档的结尾:
它应该替换245
数组中索引occurrences
中的对象,但改为在文档中添加了一个键为occurrences[245]
的新映射。
我做错了什么?
答案 0 :(得分:1)
您不能在ExpressionAttributeNames
中包含下标。您只能指定属性名称。
有两种解决方法:
UpdateExpression: `SET #k1[${idx}] = :v1`,
ExpressionAttributeNames: { '#k1': 'occurrences' }
或:
UpdateExpression: `SET occurrences[${idx}] = :v1`
请注意,如果您的属性名称为reserved word,则第二种解决方案将不起作用。