rya*_*anm 3 amazon-web-services amazon-dynamodb
我有一个用户表,有一个名为friends的属性,它将是所有用户朋友的id的集合.
最初我尝试在创建用户时将friends属性实例化为空集,但是我收到一个错误,即您不能拥有空属性.
因此,如果有人没有朋友,我能找到的唯一解决方案是读取用户的属性,如果不存在,则将属性设置为与他们正在添加的朋友的列表.如果确实存在,则只需使用ADD执行更新,这会将新朋友添加到集合中.
我不想为此调用两次AWS.
有没有办法创建集合,如果它不存在,如果它存在,添加到它?
not*_*est 10
对于SET数据类型: -
ADD - 如果该属性尚不存在,则将该属性及其值添加到项目中.如果该属性确实存在,那么ADD的行为取决于属性的数据类型:
如果现有数据类型是集合,并且值也是集合,则将值添加到现有集合.(这是一个集合运算,而不是数学加法.)例如,如果属性值是集合[1,2],并且指定了ADD动作[3],那么最终属性值将是[1,2,3] ].如果为set属性指定了Add操作并且指定的属性类型与现有的set类型不匹配,则会发生错误.两个集必须具有相同的原始数据类型.例如,如果现有数据类型是一组字符串,则Value也必须是一组字符串.数字集和二进制集也是如此.
例:-
第一次更新: -
该country属性不存在于表中.使用提供的值(IN,UK)updateItem创建了新属性country.
var params = {
TableName : "Movies",
Key : {
"yearkey" : 2014,
"title" : "The Big New Movie 2"
},
UpdateExpression : "ADD country :countries",
ExpressionAttributeValues: {
':countries': docClient.createSet(["IN", "UK"])
},
ReturnValues : "UPDATED_NEW"
};
Run Code Online (Sandbox Code Playgroud)
第二次更新: -
这次updateItem添加了新值"US"并忽略了现有值"IN".
var params = {
TableName : "Movies",
Key : {
"yearkey" : 2014,
"title" : "The Big New Movie 2"
},
UpdateExpression : "ADD country :countries",
ExpressionAttributeValues: {
':countries': docClient.createSet(["IN", "US"])
},
ReturnValues : "UPDATED_NEW"
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4099 次 |
| 最近记录: |