DynamoDB获取查询

时间:2017-01-12 07:21:44

标签: java amazon-dynamodb

@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();

您好

我有一个像上面那样的表结构。 什么是查询以获取仅具有

的结果

1)queueName - &gt; PFS
2)ETA - &gt;大于2017年1月1日 3)订单状态 - PO

请在 JAVA 中建议完整查询上述方案。

1 个答案:

答案 0 :(得分: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(字符串类型)。 Date值存储为ISO-8601格式的字符串。