javascript - 使用 node.js 在值之间查询 DynamoDB

标签 javascript node.js amazon-web-services amazon-dynamodb aws-lambda

使用node.js查询dynamoDB表。 DynamoDB 表的键为 Timestamp,由整数表示。在本例中,我将 :timestampStart 保留为 1,将 timestampEnd 保留为 10 作为示例。

    var params = {
        TableName: "Table2",
        KeyConditionExpression:"Timestamp = :ts BETWEEN :timestampStart AND :timestampEnd",
        ExpressionAttributeValues: {
            ":ts":"Timestamp",
            ":timestampStart": 1,
            ":timestampEnd": 10
        }
    };

:ts 不正确,我可以看到这一点。我想返回在 timestampStart 和 timestampEnd 之间找到的时间戳值的任何行。

错误消息:

"errorMessage": "Invalid KeyConditionExpression: Syntax error; token: \"BETWEEN\", near: \":ts BETWEEN :timestampStart\"",

最佳答案

如果 Timestamp 是分区键而不是排序键。那么,你有两个问题:

  1. Query 中操作时,您无法对分区键执行比较测试(<、>、BETWEEN、...)。该条件必须对单个分区键值执行相等测试 (=),并且可以选择对单个排序键值执行多个比较测试之一。例如:

    KeyConditionExpression: 'HashKey = :hkey 和 RangeKey > :rkey'

  2. 您的 KeyConditionExpression 中存在语法错误,显然。请记住,Timestampreserved word在 DynamoDB 中。因此,您必须使用 ExpressionAttributeNames 来实现:

(假设您有一个 Id 分区键和 Timestamp 排序键)

var params = {
   TableName: "Table2",
   KeyConditionExpression: "Id = :id AND #DocTimestamp BETWEEN :start AND :end",
   ExpressionAttributeNames: {
     '#DocTimestamp': 'Timestamp'
   },
   ExpressionAttributeValues: {
     ":id": "SOME VALUE",
     ":start": 1,
     ":end": 10
   }
 };

关于javascript - 使用 node.js 在值之间查询 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42355776/

相关文章:

javascript - jquery .data() 方法

node.js - React-Native 打包程序失败 : Duplicate module name

amazon-web-services - Amazon CloudFront 的开源成熟等效项是什么?

javascript - 使用 forkJoin 的条件可观察对象

javascript - 如何让div在悬停和点击时下沉

php - 如何将 PHP 整型变量中的整型值传递给 JS?

javascript - 错误 : `useFindAndModify` is an invalid option

javascript - 使用 Node.js 使用 RabbitMQ 消息时,我可以等待进程完成吗?

database - 如何使用云形成 yaml 配置设置 DynamoDB 的最大预配置容量?

powershell - 使用 Write-S3Object 时如何设置 Cache-Control?