通过二级索引查询项目,只有二级 hashKey,没有 rangeKey

Querying items by secondary index with only secondary hashKey, no rangeKey

我在 dynamoDb 中有一个 table 主哈希键 itemId。项目也与 parent 项目有关系,所以除了通过其 itemId 查询它们之外,我还希望能够检索 parent 的所有 children,所以我添加了另一个属性 parentId.

现在我希望能够找到给定 parent 的所有 children。阅读文档,我知道我需要创建一个二级索引,但我不明白我的 rangeKey 应该是什么以及如何在不设置范围条件的情况下构造 DynamoDBQueryExpression<Item>

我想我缺少一些基本的东西...

我假设您的 table 看起来像这样:

itemId (hash key), parentId

您需要在此 table 上创建一个如下所示的全局二级索引:

parentId (hash key), itemId (range key)

现在,您可以 Query 在 KeyConditionExpression 中设置父 ID。

这是一个写在Ruby中的例子:

resp = Aws::DynamoDB::Client.new.query(
  table_name: "MyTableName",
  select: "SPECIFIC_ATTRIBUTES",
  attributes_to_get: ["parentId", "itemId"],
  key_condition_expression: "parentId = <parent_whose_children_you_want>",
  exclusive_start_key: <query_start_key_from_prev_query>
)

一旦 DynamoDB 达到 1MB 的数据,它将 return 并为您提供一个 LastEvaluatedKey,您可以将其用作下一个查询的 ExclusiveStartKey。这样您就可以翻阅您的数据库。