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是分区键而不是排序键。那么,你有两个问题:
在查询操作中,您不能对分区键执行比较测试(<、>、BETWEEN、...)。条件必须对单个分区键值执行相等测试 (=),并且可以选择对单个排序键值执行多个比较测试之一。例如:
KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey'
你在你的语法错误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)
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |