首页 > 解决方案 > 带有 value 关键字的 Dynamo DB 扫描字段

问题描述

我正在尝试根据value名称中包含的列表项的值扫描 dynamo db 表。该领域是

"TPMS.value": {
    "L": [
      {
        "N": "0"
      },
      {
        "N": "0"
      },
      {
        "N": "0"
      },
      {
        "N": "0"
      }
    ]
  }

我想在TPMS.value[0] != 0 我尝试过的地方得到结果

aws dynamodb scan \
    --table-name afdcm-app-demo-Telemetry-Int_Table \
    --filter-expression "TPMS.value[0] > :val"  \
    --expression-attribute-values '{":val":{"N":"0"}}'

但我不断得到Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: value。有没有办法在字段名称包含的地方运行扫描value

标签: amazon-dynamodbaws-clidynamodb-queries

解决方案


您必须使用--expression-attribute-names选项。根据文档(https://docs.aws.amazon.com/cli/latest/reference/dynamodb/scan.html):

表达式中属性名称的一个或多个替换标记。以下是使用 ExpressionAttributeNames 的一些用例:

  • 访问名称与 DynamoDB 保留字冲突的属性。

  • 创建一个占位符,用于在表达式中重复出现属性名称。

  • 防止属性名称中的特殊字符在表达式中被误解。


所以在你的情况下,命令应该类似于:

aws dynamodb scan --table-name afdcm-app-demo-Telemetry-Int_Table --filter-expression "#VAL[0] > :val" --expression-attribute-names '{"#VAL":"TPMS.value"}' --expression-attribute-values '{":val":{"N":"0"}}'

推荐阅读