Dynamodb返回所有排序的结果



我有一个简单的发电机数据库模型:

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
}

最新更新