我在dynamoDb中有一个带有主hashKey itemId
的表。项目也与父项目有关系,因此除了通过itemId
查询它们之外,我还希望能够检索父项的所有子项,因此我添加了另一个属性parentId
。
现在我希望能够找到给定父母的所有孩子。阅读文档,我理解我需要创建一个二级索引,但是我无法理解我的rangeKey应该是什么以及如何在不设置范围条件的情况下构造DynamoDBQueryExpression<Item>
。
我想遗失一些基本的东西......
答案 0 :(得分:1)
我假设你的桌子看起来像这样:
itemId (hash key), parentId
您需要在此表上创建一个类似于以下内容的全局二级索引:
parentId (hash key), itemId (range key)
现在,您可以在KeyConditionExpression中设置父ID的Query。
这是一个用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。通过这种方式,您可以翻阅数据库。