【问题标题】:AWS DynamoDB Scan filterExpression - simple number comparisonAWS DynamoDB Scan filterExpression - 简单的数字比较
【发布时间】:2015-05-05 15:16:19
【问题描述】:

我正在尝试使用过滤器表达式 (documentation here) 进行简单的 dynamoDB 扫描

这是我的表达式字符串:

"attribute_exists("my_db_key") AND ("my_db_key" = 1)"

这只是说明:

“如果 my_db_key 的值存在且 my_db_key 等于 1,则在结果中返回它”

但是它不起作用,我得到一个错误:

Invalid FilterExpression: Syntax error; token: "1", near: "= 1)

我知道我可以为值使用属性值占位符,然后在表达式中使用它,但我不想这样做。根据亚马逊的文档,它不是必需的。

那么我该如何做这个简单的表达呢?有人有示例或文档链接吗?不幸的是,亚马逊的文档没有帮助。

注意:我在 iOS 上使用 AWSDynamoDBScanInput 实现此功能,但我的问题与全局表达式语法有关,所以这无关紧要。

【问题讨论】:

    标签: amazon-web-services expression amazon-dynamodb


    【解决方案1】:

    您的参数需要看起来像这样(对于 Node AWS 库):

    params = {
      "FilterExpression": 'attribute_exists("my_db_key") AND ("my_db_key" = :value)',
      "ExpressionAttributeValues": {
        ":value": 1
      },
      // ...
    };
    
    docClient.scan(params, function(err, data){
      // Handle err or process data
    })
    

    对于某些语言,参数应该看起来更像这样:

    {
      "FilterExpression": 'attribute_exists("my_db_key") AND ("my_db_key" = :value)',
      "ExpressionAttributeValues": {
        ":value": {"N":1}
      },
      // ...
    };
    

    【讨论】:

    • 我正在尝试实现类似的东西,但出现语法错误。不知道有什么问题。
    • 应该是"ExpressionAttributeValues":{":value":{"N":1}} (cc @KatharineOsborne)
    • 你是对的。我使用的 Node 库允许我排除类型标识符。
    • 使用 DocumentClient 库时不需要类型标识符。
    【解决方案2】:

    您必须使用占位符并单独传递值。这是一些documentationPost from AWS forums

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多