voi*_*oid 19 amazon-web-services node.js amazon-dynamodb aws-sdk
我需要使用相应的键将字符串附加到dynamodb表中的字符串集.这是我用来执行updateItem的Update表达式:
var params = {
"TableName" : tableName,
"Key": {
"ID": {
S: "20000"
}
},
"UpdateExpression" : "SET #attrName = list_append(#attrName, :attrValue)",
"ExpressionAttributeNames" : {
"#attrName" : "entries"
},
"ExpressionAttributeValues" : {
":attrValue" : {"SS":["000989"]}
} };
Run Code Online (Sandbox Code Playgroud)
这在我使用aws cli执行updateItem()时有效.但是当在nodejs中使用aws-sdk时,我收到错误:
Invalid UpdateExpression: Incorrect operand type for operator or function; operator or function: list_append, operand type: M\n
Run Code Online (Sandbox Code Playgroud)
有帮助吗?谢谢
che*_*box 31
list_append可以读作"连接"操作.你只需给它两个清单.
"UpdateExpression" : "SET #attrName = list_append(#attrName, :attrValue)",
"ExpressionAttributeNames" : {
"#attrName" : "entries"
},
"ExpressionAttributeValues" : {
":attrValue" : ["000989"]
}
Run Code Online (Sandbox Code Playgroud)
值得记住的是,DynamoDB中的列表(和地图)不是键入的,可以存储任意数据.
附注:有了这些知识,关于附加到列表开头的文档现在是有道理的:
list_append (operand, operand)此函数将评估为添加了新元素的列表.您可以通过反转操作数的顺序将新元素附加到列表的开头或结尾.
在这个问题上有一个公认的答案,它帮助我解决了这个问题的一部分.但是,我们通常希望使用其他对象而不是字符串来更新列表.为此,我发现尽可能避免使用ExpressionAttributeNames很有用.
1)确保DynamoDB表中项目中的值是一个列表.2)确保传入一个对象列表(即使你只有一个),而不是一个简单的对象
UpdateExpression: "set pObj.cObj= list_append(pObj.cObj, :obj)",
ExpressionAttributeValues: {
":obj": [
{myObject: {
property1: '',
property2: '',
property3: '',
}}
]
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13162 次 |
| 最近记录: |