2017-01-12 12 views
1
@DynamoDBTable(tableName = "OrderDashboardMetadata") 
public class OrderDashBoardMetaData { 

private int position; 
private Date ETA = null; 
private List<String> notes; 

@DynamoDBHashKey(attributeName = "queueName") 
private String queueName; 

@DynamoDBRangeKey(attributeName = "orderId") 
private String orderId; 

@DynamoDBIndexHashKey(globalSecondaryIndexName = "city") 
private String city; 

@DynamoDBIndexRangeKey(globalSecondaryIndexName = "city") 
private String fcId; 

@DynamoDBIndexHashKey(globalSecondaryIndexName = "orderState") 
private String orderState; 

@DynamoDBAttribute(attributeName = "action") 
private String action; 

@DynamoDBAttribute(attributeName = "createdTime") 
private Date createdTime = new Date(); 

@DynamoDBAttribute(attributeName = "updatedTime") 
private Date updatedTime = new Date(); 

안녕내가 위의 같은 테이블 구조를 가지고 쿼리를

를 가져 DynamoDB의.

1) QUEUENAME가있는 경우에만 결과를 가져 오기 위해 쿼리가 될 것입니다 무엇 -> PFS
2) ETA -> 큰 2017년 1월 1일
3) 주문 상태 이상 - 친절 PO

위의 시나리오에 대한 전체 쿼리를 JAVA에 제안하십시오.

답변

0

그렇게 ETA 가정 주석하지 않았으므로 또한 인 DDBAttribute

Map<String, AttributeValue> expValues = new HashMap<>(); 
expValues.put(":hv", new AttributeValue("PFS")); 
expValues.put(":osv", new AttributeValue("PO")); 
expValues.put(":etav", new AttributeValue("2017-01-01")); 

QueryRequest q = new QueryRequest("OrderDashboardMetadata"); 
q.setKeyConditionExpression("queueName = :hv"); 
q.setFilterExpression("orderState = :osv and ETA > :etav"); 
q.setExpressionAttributeValues(expValues); 
QueryResult r = dbClient.query(q); 

참고 : 날짜는 S (문자열 형식)로 저장됩니다. 날짜 값은 ISO-8601 형식의 문자열로 저장됩니다.

+0

감사합니다. 그것은 – sid297

+1

upvote를 처리했으며 감사하다는 말을하는 좋은 방법은 다른 사람들을 도울 것입니다. –

관련 문제