DynamoDB DocumentClient возвращает набор атрибутов строк (SS) как объект
Я новичок в DynamoDB. Когда я читаю данные из таблицы с помощью класса AWS.DynamoDB.DocumentClient, запрос работает, но я получаю результат в неправильном формате.
Запрос:
{
TableName: "users",
ExpressionAttributeValues: {
":param": event.pathParameters.cityId,
":date": moment().tz("Europe/London").format()
},
FilterExpression: ":date <= endDate",
KeyConditionExpression: "cityId = :param"
}
Ожидаемое:
{
"user": "boris",
"phones": ["+23xxxxx999", "+23xxxxx777"]
}
Актуально:
{
"user": "boris",
"phones": {
"type": "String",
"values": ["+23xxxxx999", "+23xxxxx777"],
"wrapperName": "Set"
}
}
Спасибо!
1 ответ
Функция [unmarshall] из [AWS.DynamoDB.Converter] является одним из решений, если ваши данные поступают, например, следующим образом:
{
"Attributes": {
"last_names": {
"S": "UPDATED last name"
},
"names": {
"S": "I am the name"
},
"vehicles": {
"NS": [
"877",
"9801",
"104"
]
},
"updatedAt": {
"S": "2018-10-19T01:55:15.240Z"
},
"createdAt": {
"S": "2018-10-17T11:49:34.822Z"
}
}
}
Обратите внимание на спецификацию объекта / карты {} для каждого атрибута, содержащую тип attr. Означает, что вы используете класс [dynamicodb], а не [DynamoDB.DocumentClient]. [Unmarshall] преобразует запись DynamoDB в объект JavaScript.
Заявлено и поддержано AWS. Ссылка https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html
Тем не менее, я столкнулся с точно таким же вариантом использования, как и ваш. Имея только один атрибут, TYPE SET (NS) в моем случае, и мне пришлось сделать это вручную. Следующий фрагмент:
// Please notice the <setName>, which represents your set attribute name
ddbTransHandler.update(params).promise().then((value) =>{
value.Attributes[<setName>] = value.Attributes[<setName>].values;
return value; // or value.Attributes
});
Приветствия, Гамлет