我是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"
}
}
谢谢!
答案 0 :(得分:0)
如果您的数据如下,则[ AWS.DynamoDB.Converter ]中的[ unmarshall ]函数是一种解决方案:
{
"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类型。 表示您使用的是[ dynamodb ]类,而不是[ DynamoDB.DocumentClient ]。 [ unmarshall ]会将DynamoDB记录转换为JavaScript对象。
由AWS声明并支持。参考https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html#unmarshall-property
尽管如此,我仍然面临着与您相同的用例。在我的情况下,只有一个属性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
});
干杯, 哈姆雷特