@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 中建议完整查询上述方案。
答案 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格式的字符串。