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

Ior*_*rek 2 javascript amazon-web-services node.js 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
        }
    };
Run Code Online (Sandbox Code Playgroud)

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

错误信息:

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

Kha*_* T. 10

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

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

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

  2. 你在你的语法错误KeyConditionExpression很明显。请记住,这Timestamp是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
   }
 };
Run Code Online (Sandbox Code Playgroud)