【问题标题】:Can I query DynamoDBMapper with partition key only?我可以仅使用分区键查询 DynamoDBMapper 吗?
【发布时间】:2019-11-26 17:27:58
【问题描述】:

我已经看到this page 关于如何仅使用分区键进行查询。但是,我的情况是使用DynamoDBMapper class 进行查询,在那里似乎有效的方法并不适用。

这是我的代码的一部分:

private final DynamoDBMapper mapper; 
List<QueryResult> queryResult = mapper.query(QueryResult.class, queryExpression);

我查询的表有一个主分区键id和主排序键timestamp

我想查询所有指定id的行,eav看起来像:

{:id={S: 0123456,}}

但如果 id 有重复项(这是有道理的,因为它是分区键),它总是给我

"The provided key element does not match the schema"

不知道如何解决这个问题。由于与其他表共享代码,DynamoDBMapper 类是必须的。

任何帮助表示赞赏!谢谢。

【问题讨论】:

  • queryExpression 中的内容
  • @Charles 感谢您的回复!我修复了 queryExpression 问题,但现在它仍然不允许我仅使用分区键进行查询。我编辑了上面的问题。
  • @Kei 这解决了吗?我也有相同的用例,但文档指出查询只能同时使用散列键和范围键。可以分享一下解决方法吗?

标签: amazon-web-services amazon-dynamodb dynamodb-queries


【解决方案1】:

下面的工作吗?

final DynamoDBQueryExpression<QueryResult> queryExpression = new DynamoDBQueryExpression<>();
        expression.setKeyConditionExpression("id = :id");
        expression.withExpressionAttributeValues(ImmutableMap.of(":id", new AttributeValue("0123456")));

【讨论】:

    【解决方案2】:

    这是一个工作示例:

    final MyItem hashKeyValues = MyItem.builder()
                                 .hashKeyField("abc")
                                 .build();
    
    final DynamoDBQueryExpression<MyItem> queryExpression = new DynamoDBQueryExpression<>();
    queryExpression.withHashKeyValues(hashKeyValues);
    queryExpression.setConsistentRead(false); //or true
    
    final PaginatedQueryList<MyItem> response = dynamoDBMapper.query(MyItem.class, queryExpression);
    

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 2021-06-14
      • 2016-11-23
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多