amazon-web-services - DynamoDB PutItem 中的非预期结果
问题描述
问:当我有复合主键时,如何避免将项目插入表中?
我只能在文档中找到带有单个主键的示例(只有一个分区键,但没有分区键和排序键)。
语境:
- 我的分区键名为 PK,排序名为 SK。
- 我的 PK 是一个 UUID,SK 由一个随机存储桶 [0-9] 组成,例如“user#info#3”,(3 是随机存储桶)。
- 相同的 PK 可能会出现多次,但每次重复的 SK 总是不同的。
- 我只想在(PK 不存在)或(PK 存在且 SK 不以 user#info 开头)时将项目插入表中
我的期望与我的结果
[outcome: expected - the item was not inserted]
如果我尝试插入具有现有 PK 和精确 SK 的项目(例如,插入 user#info#3,并且 user#info#3 已经存在),则不应插入该项目。[outcome: NOT expected - the item was inserted]
如果我尝试插入具有现有 PK 和非精确 SK 的项目(例如,插入 user#info#3,并且 user#info#5 已经存在),则不应插入该项目。[outcome: expected - the item was inserted]
如果我尝试插入不存在 PK 的项目,则应插入该项目。
我正在使用这个命令行片段(从这里修改)将数据插入到表中:
aws dynamodb put-item \
--table-name Users \
--item file://item.json \
--condition-expression "attribute_not_exists(PK) OR NOT begins_with(SK, :sk)" \
--expression-attribute-values file://values.json
项目.json
{
"PK": {
"S": "910cc6dd-b7e2-4286-89d4-db3d0e3fde6b"
},
"SK": {
"S": "user#info#4"
},
"Name": {
"S": "Greg"
}
}
值.json
{
":sk": {
"S": "user#info"
}
}
如果我删除 PK 条件,并尝试仅检查 SK 条件,它会插入项目(我希望它不会插入项目),例如:
aws dynamodb put-item \
--table-name Users \
--item file://item.json \
--condition-expression "NOT begins_with(SK, :sk)" \
--expression-attribute-values file://values.json
上面插入了该项目,即使表中还有一个以开头的项目user#info
解决方案
推荐阅读
- c# - 不应为空的 C# 变量引发空引用异常
- oracle - 如何获取必填字段中的数据?
- python - 如何加快对 python 数组的操作?
- vbscript - 计算行数
- microsoft-graph-api - Microsoft Graph 中的用户主体名称 (UPN) 或邮件所有权验证
- c++ - [LLVM-9 clang-9 OSX]:std::filesystem::path 无法识别
- fullcalendar - 使用 tooltip.js 悬停在完整日历版本 4.3 中不起作用
- leaflet - 传单图层组默认值
- python - 为什么 send_message 不存在?
- python - 如何比较 CSV 文件中的两个表?