通过二级索引查询项目,只有二级 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。这样您就可以翻阅您的数据库。
我在 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。这样您就可以翻阅您的数据库。