通过辅助索引查询项目,仅使用辅助hashKey,不使用rangeKey

时间:2015-10-03 06:01:42

标签: amazon-dynamodb aws-java-sdk

我在dynamoDb中有一个带有主hashKey itemId的表。项目也与父项目有关系,因此除了通过itemId查询它们之外,我还希望能够检索父项的所有子项,因此我添加了另一个属性parentId

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

我想遗失一些基本的东西......

1 个答案:

答案 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。通过这种方式,您可以翻阅数据库。