Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在aws cli中,如何根据条件从DynamoDB中删除项目?_Amazon Web Services_Search_Conditional_Amazon Dynamodb_Aws Cli - Fatal编程技术网

Amazon web services 在aws cli中,如何根据条件从DynamoDB中删除项目?

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 CLI,根据条件删除行时遇到问题

我有一个文件名密钥,我想删除所有包含“20200322”的密钥

命令

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
的意义。