Я пытаюсь заменить массив в элементе Dynamodb, но получаю сообщение об ошибке
* UnexpectedParameter: Unexpected key '0' found in params.ExpressionAttributeValues[':myArray']
* UnexpectedParameter: Unexpected key '1' found in params.ExpressionAttributeValues[':myArray']
* UnexpectedParameter: Unexpected key '2' found in params.ExpressionAttributeValues[':myArray']
* UnexpectedParameter: Unexpected key '3' found in params.ExpressionAttributeValues[':myArray']
* UnexpectedParameter: Unexpected key '4' found in params.ExpressionAttributeValues[':myArray']
Я думал, что правильно устанавливаю атрибуты, но, похоже, нет.
рекорд динамо
{
"PK": "myItem",
"myArray": [
{
"timeStamp": 1672678545
},
...more objects
]
}
let params = {
UpdateExpression: 'set #myArray = :myArray',
ExpressionAttributeNames: {
'#myArray': 'myArray'
},
ExpressionAttributeValues: {
':myArray': filteredOutObjects
},
Key: {
PK: {
S: 'myItem'
}
},
TableName: 'configs',
ReturnValues: 'ALL_NEW'
};
try {
const result = await dynamo.updateItem(params).promise();
console.info('RESULT', result);
return result;
} catch (e) {
console.info('ERROR', e);
}
filteredOutObjects
должен быть подходящим типом данных для DynamoDB и выглядеть следующим образом:
filteredOutObjects = { 'L' : [1,2,3...] }
Или скорее:
ExpressionAttributeValues: {
':myArray': {
'L': filteredOutObjects
}
},
Если вы хотите просто передать массив как filteredOutObjects, вам следует использовать Document Client.
Клиент DynamoDB Document упрощает работу с элементами, абстрагируя понятие значений атрибутов. Эта абстракция аннотирует собственные типы JavaScript, предоставленные в качестве входных параметров, и преобразует аннотированные данные ответа в собственные типы JavaScript.
Спасибо, что прояснили это для меня. Получил работу!
Как вы производите
filteredOutObjects
?ExpressionAttributeValues
поле ожидает пары ключ-значение, где значение представляет собой объект, содержащий ключ типа данных + значение