Jos*_*ose 8 amazon-web-services node.js amazon-dynamodb
我创建了一个String Set类型的属性.当我创建创建项目并分配类型SS的属性时,一切正常.但是当我尝试更新此属性时,数据类型将更改为列表("L").
我试试这个:
qw = new AWS.DynamoDB.DocumentClient();
var params = {
TableName : "myTable",
Key: {
"id": somekey
},
UpdateExpression: "set ssvar= :arrp",
ExpressionAttributeValues: {
":arrp": [ "test", "test2" ]
}
};
qw.update (etc.)
Run Code Online (Sandbox Code Playgroud)
这会导致dynamodb中数据类型的更改,而不是字符串集我得到一个列表:
"ssvar": {
"L": [
{
"S": "test"
},
{
"S": "test2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试了各种类似的解决方案,但总是我的数据类型发生了变化.
ExpressionAttributeValues: {
":arrp":
"SS": [ "test", "test2" ]
}
Run Code Online (Sandbox Code Playgroud)
如何更新字符串集类型的属性?
Tor*_*rAL 14
截至2015年9月,createSetDocumentClient中有一个可用于此的功能.
更新 - 添加了示例
我已修改您的示例代码以使用此功能:
qw = new AWS.DynamoDB.DocumentClient();
var params = {
TableName : "myTable",
Key: {
"id": somekey
},
UpdateExpression: "set ssvar= :arrp",
ExpressionAttributeValues: {
":arrp": qw.createSet([ "test", "test2" ])
}
};
qw.update (etc.)
Run Code Online (Sandbox Code Playgroud)
这是使用 DocumentClient 的产物 - StringSet 不是 JSON 类型。
DocumentClient 将 StringSet 转换为 Array 原生 JavaScript 类型:https : //github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L61。然后客户端将原生 JavaScript 数组序列化为 DynamoDB 列表类型:https : //github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L12。
如果要使用 StringSet 类型,可以使用低级 API:https : //docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html
| 归档时间: |
|
| 查看次数: |
5401 次 |
| 最近记录: |