Amazon web services 在aws cli中,如何根据条件从DynamoDB中删除项目?
我正在使用AWS CLI,根据条件删除行时遇到问题 我有一个文件名密钥,我想删除所有包含“20200322”的密钥 命令Amazon web services 在aws cli中,如何根据条件从DynamoDB中删除项目?,amazon-web-services,search,conditional,amazon-dynamodb,aws-cli,Amazon Web Services,Search,Conditional,Amazon Dynamodb,Aws Cli,我正在使用AWS CLI,根据条件删除行时遇到问题 我有一个文件名密钥,我想删除所有包含“20200322”的密钥 命令 aws dynamodb delete-item \ --table-name "logs" \ --condition-expression "contains(file_name, :file_name)" \ --expression-attribute-names file://expression.json \ --key file:
aws dynamodb delete-item \
--table-name "logs" \
--condition-expression "contains(file_name, :file_name)" \
--expression-attribute-names file://expression.json \
--key file://key.json
expression.json-要在contains中使用的变量
{
":file_name": {
"S": "20200322"
}
}
key.json-我不理解这个文件的意义
{
"file_name": {
"S": "20200322"
}
}
错误
参数验证失败:参数的类型无效
ExpressionAttributeNames.:文件名,值:OrderedDict([(u'S',
u'20200322')),类型:,有效类型:
问题
- 如何根据包含条件删除单个条目
- 如果使用
--expression属性名称开关,为什么键是必需的?钥匙需要是什么
和--表达式属性值
--表达式属性名称
包含
函数采用2个参数:a路径
和操作数
包含(路径、操作数)
这里缺少操作数
aws dynamodb delete-item \
--table-name "logs" \
--key '{"file_name": {"S": "20200322"}}'
--condition-expression "contains(file_name, :file_name)" \
--expression-attribute-values file://wvid_logs.json
注意一对单引号中有双引号
在JSON中,应该是
{
":file_name": {
"S": "20200322"
}
}
问题是,您希望运行条件删除,因此该键需要是您要删除的项的键,表达式属性值将是要检查的条件,我不完全确定您是否可以对该键本身运行条件
假设你有
{
"Id": {
"N": "12345"
}
"file_name": {
"S": "20200322"
}
}
运行命令
aws dynamodb delete-item \
--table-name "logs" \
--key '{"Id": {"N": "12345"}}'
--condition-expression "contains(file_name, :file_name)" \
--expression-attribute-values file://wvid_logs.json
仅当文件中的条件与项目匹配时,该命令才会删除该项目。所以如果你有
{
":file_name": {
"S": "20200322"
}
}
它将删除该项,JSON文件中的任何其他值都不会删除该项。我有一个类似的问题,在我的例子中,我发现(经过很长一段时间)当直接在终端中输入时,键属性(以及所有映射属性)应该用单引号括起来
aws dynamodb delete-item \
--table-name "logs" \
--condition-expression "contains(file_name, :file_name)" \
--expression-attribute-names file://expression.json \
--key '{":file_name": {"S": "20200322"}}'
您好@frédéric henri,您说得对,我没有使用
--表达式属性值。我用的是--key
。我更新了上面运行的命令,出现了新错误。如果我使用的是表示的值,我不确定--key
的意义。