Dynamodb 在字典中添加或更新键
Dynamodb Add or Update key in dict
我有一个具有以下结构的 dynamodb table:
'Items': [
{'user_id': 'myuser',
'owes_to': {
'youruser': '10',
'user3': '20'
}
}]
在 dynamodb 中是否可以在 owes_to
中创建一个新的用户密钥,或者如果它已经存在则添加到该密钥的值中?
在两个调用的示例中:
- 添加值为 20 的 'user4',它不存在,因此创建值为 20 的 user4 密钥)
- 下次将 user4 值 20 更新为 40,这次密钥已经存在,因此将 20 添加到现有值
有可能,更新表达式类似这样:
update_request = {
Key={'user_id': ':id'},
UpdateExpression='SET owes_to.#user_name = if_not_exists(owes_to.#user_name, :default_val) + :val',
ExpressionAttributeNames={
'#user_name': <your_user_name>
}
ExpressionAttributeValues={
':id': 'myuser',
':val': <your_update_value>,
':default_val': 0
}
}
注意 if_not_exists(owes_to.#user_name, :default_val)
结构。如果存在,它将获取用户的值,如果不存在,则获取 :default_val
中指定的值。
有关在 official docs
中添加和更新地图值的更多信息
我有一个具有以下结构的 dynamodb table:
'Items': [
{'user_id': 'myuser',
'owes_to': {
'youruser': '10',
'user3': '20'
}
}]
在 dynamodb 中是否可以在 owes_to
中创建一个新的用户密钥,或者如果它已经存在则添加到该密钥的值中?
在两个调用的示例中:
- 添加值为 20 的 'user4',它不存在,因此创建值为 20 的 user4 密钥)
- 下次将 user4 值 20 更新为 40,这次密钥已经存在,因此将 20 添加到现有值
有可能,更新表达式类似这样:
update_request = {
Key={'user_id': ':id'},
UpdateExpression='SET owes_to.#user_name = if_not_exists(owes_to.#user_name, :default_val) + :val',
ExpressionAttributeNames={
'#user_name': <your_user_name>
}
ExpressionAttributeValues={
':id': 'myuser',
':val': <your_update_value>,
':default_val': 0
}
}
注意 if_not_exists(owes_to.#user_name, :default_val)
结构。如果存在,它将获取用户的值,如果不存在,则获取 :default_val
中指定的值。
有关在 official docs