기존 범위 키의 최대 값을 처음으로 쿼리하지 않고 비교할 수 없으므로 두 단계로이를 수행해야합니다.
1) 키를 당신의 주어진 파티션
2) 반환 된 키가 정확히 하나의 작은 경우 당신이 가지고있는 하나가 반환 범위의 키를 비교하여 가장 높은 범위 키를 사용하여 항목을 가져 오기, 새 항목을 넣어. (쿼리가 이미 존재하지 않음을 확인 했으므로 항목이 이미 있는지 여부를 실제로 확인하지 않아도됩니다.
DynamoDB는 지정된 파티션의 범위 키 순서로 항목을 저장하며 지정된 파티션의 항목을이 순서로 반환합니다. 범위 키가 숫자 인 경우 정렬 순서는 숫자이며 파티션에 대한 최종 결과가 첫 번째가 아닌 결과를 원하게됩니다. ScanIndexForward를 사용하여 쿼리의 순서를 존중하고 첫 번째 항목을 가져올 수 있습니다.
쿼리는 다음과 같습니다
항목 범위 키가 새 항목 범위 키 이상의 이하인
Table table = dynamoDB.getTable("YOUR_TABLE");
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("hash = :v_hash")
.withValueMap(new ValueMap()
.withString(":v_hash", "your_hash")
.withScanIndexForward(false)
.setMaxResultSize(1);
ItemCollection<QueryOutcome> items = table.query(spec);
경우, 항목을 넣어. 항목 목록이 비어 있으면 (즉, 파티션 키가 아직 존재하지 않는 경우) 동작을 고려해야합니다.
출처
2017-12-04 10:40:14
Stu
당신이'ExpectedAttributeValue() .withValue (새의 AttributeValue(). withN ("20")) .withComparisonOperator (ComparisonOperator.LT) 같은 ** 비교 연산자 ** 뭔가를 시도'이 예로 이동하시기 바랍니다 어쩌면 이것이 도움이 될 것입니다. https://aws.amazon.com/blogs/developer/using-improved-conditional-writes-in-dynamodb/ –