我有一个简单的发电机数据库模型:
id (partition key), timestamp_id (sort key)
我只想从dynamo中得到所有数据(使用极限等),但按timestamp_id
排序。不幸的是,扫描不会返回排序后的数据,而且我似乎不能有一个空的查询,除非我遗漏了什么。
您无法按时间戳_id排序所有记录。
您可以只按"id"对时间戳id进行排序。
dynamodb根据组合键对结果进行排序。
所以在你的情况下,如果你的行看起来像:
1,3
1,2
2,4
1,5
2,3
在您的案例中,结果是:
1,2
1,3
1,5
2,3
2,4
正如您所看到的,结果不仅按时间戳id排序,还按时间戳id排序。
您可以创建一个GSI(我们将其命名为timestamp_id-index
):
我们将指定索引的分区键为名为fixed_val
的属性,并将排序键指定为timestamp_id-index
。
fixed_val
将包含您想要的任何值,但它必须始终是那个值,并且您必须从客户端了解它。为了这个例子,假设fixed_val
将始终是1
。
GSI密钥不必是唯一的,所以如果有两个重复的timestamp_id
值,也不用担心。
您可以这样查询表格:
var now = Date.now();
//...
{
TableName: "foo",
IndexName: "timestamp_id-index",
ExpressionAttributeNames: {
"#f": "fixed_value"
},
ExpressionAttributeValues: {
":f": 1,
},
KeyConditionExpression: "#f = :f",
// true -> ascending, false -> descending
ScanIndexForward: true
}