我在 dynamoDb 中有一个带有主 hashKey 的表itemId
。项也与父项有关系,因此除了通过它查询它们之外itemId
,我还希望能够检索父项的所有子项,所以我添加了另一个属性parentId
。
现在我希望能够找到给定父母的所有孩子。阅读文档,我知道我需要创建一个二级索引,但我不明白我的 rangeKey 应该是什么以及如何在DynamoDBQueryExpression<Item>
不设置范围条件的情况下构造 a 。
我想我错过了一些基本的东西......
我在 dynamoDb 中有一个带有主 hashKey 的表itemId
。项也与父项有关系,因此除了通过它查询它们之外itemId
,我还希望能够检索父项的所有子项,所以我添加了另一个属性parentId
。
现在我希望能够找到给定父母的所有孩子。阅读文档,我知道我需要创建一个二级索引,但我不明白我的 rangeKey 应该是什么以及如何在DynamoDBQueryExpression<Item>
不设置范围条件的情况下构造 a 。
我想我错过了一些基本的东西......
我假设您的表看起来像这样:
itemId (hash key), parentId
您需要在此表上创建一个全局二级索引,如下所示:
parentId (hash key), itemId (range key)
现在,您可以在 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 的数据,它将返回并为您提供 LastEvaluatedKey,您可以将其用作下一个查询的 ExclusiveStartKey。这样您就可以分页浏览您的数据库。