我如何从DynamoDBIndexHashKey获得项目



我想指定。我可以只接收DynamoDBIndexHashKey的元素,不使用DynamoDBHashKey吗?

我有一个包含字段的表

@DynamoDBIndexHashKey (attributeName = "count", globalSecondaryIndexName = "count-index")
@DynamoDBHashKey(attributeName="cluster_output_Id)"
@DynamoDBRangeKey(attributeName="last_fetch)"  

我没有@DynamoDBIndexRangeKey

代码:

 MyEntity myEntity = new MyEntity();
    myEntity.setCount(1);    // Integer
    DynamoDBQueryExpression<NewsDynamoDb> queryExpression = new DynamoDBQueryExpression<NewsDynamoDb>()
            .withHashKeyValues(myEntity)
            .withIndexName("count-index");
    queryExpression.setConsistentRead(false);
    List<MyEntity> myCollection = mapper.query(MyEntity.class, queryExpression);
错误:

AmazonServiceException: Status Code: 400, AWS Service: AmazonDynamoDBv2, AWS Request ID: I97S04LDGO6FSF56OCJ8S3K167VV4KQNSO5AEMVJF66Q9ASUAAJG, AWS Error Code: ValidationException, AWS Error Message: One or more parameter values were invalid: Invalid number of argument(s) for the EQ ComparisonOperator

如何从DynamoDBIndexHashKey中获取物品

注。扫描-工作,但不感兴趣的我,因为在一个进一步的我想排序使用DynamoDBHashKey进行查询。我有问题与DynamoDBIndexHashKey

相同的示例

这就是我问题的答案

实体:

 @DynamoDBHashKey(attributeName="cluster_output_Id")
public Integer getCluster_output_Id() {
    return cluster_output_Id;
}
@DynamoDBIndexHashKey(attributeName = "count", globalSecondaryIndexName = "count-index")
public Integer getCount() {
    return count;
}
@DynamoDBRangeKey(attributeName="last_fetch")
@DynamoDBIndexRangeKey(attributeName = "last_fetch", globalSecondaryIndexName = "count-index")
public Date getLast_fetch() {
    return last_fetch;
}
代码:

dynamoDBMapper = new DynamoDBMapper(amazonDynamoDBClient);
MyClass myClass= new MyClass();
DynamoDBQueryExpression<MyClass > queryExpression = new DynamoDBQueryExpression<MyClass >();
        myClass.setCount(1);
queryExpression.setHashKeyValues(myClass);
queryExpression.withIndexName("count-index");  // it's not necessarily
Condition rangeKeyCondition = new Condition();
rangeKeyCondition.withComparisonOperator(ComparisonOperator.NE)
        .withAttributeValueList(new AttributeValue().withS(""));
queryExpression.setConsistentRead(false);  
List entities = dynamoDBMapper.query(MyClass.class, queryExpression);

谢谢!

就像这里解释的那样

 Table table = dynamoDB.getTable("tableName");
 Index index = table.getIndex("count-index");
 ItemCollection<QueryOutcome> items = null;
 QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("count= :v_count > 0 ")
                .withValueMap(new ValueMap()                  .withString(":v_count","1");
 items = index.query(querySpec);
 while (iterator.hasNext()) {
   //.......
 }

不能使用Query仅根据排序/范围键查找项。

你可以在这里阅读更多。

在查询操作中,使用KeyConditionExpression参数确定要从表或索引中读取的项。必须指定分区键名和值作为相等条件。您可以选择为排序键提供第二个条件(如果存在)。

在这种情况下,你的选项是:

  1. 以last_fetch作为过滤器的扫描操作。
  2. 重新设计数据库,使用last_fetch作为分区键的GSI

相关内容

  • 没有找到相关文章

最新更新