我有一张叫做朋友的桌子:
Friend 1 | Friend 2 | Status
朋友1是我的HASH属性,朋友2是我的范围属性。
我想更新项目的staus属性,其中friend 1 ='Bob',friend 2 ='Joe'。阅读http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaDocumentAPICRUDExample.html上的文档我只能看到如何用1键更新项目,如何包含其他键?
答案 0 :(得分:1)
你走了:
DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>()
.withKeyConditionExpression("Id = :val1 and ReplyDateTime > :val2")
.withExpressionAttributeValues(
...
其中Id是哈希键,ReplyDateTime是范围键。
参考: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.QueryScanExample.html
答案 1 :(得分:0)
我正在编写一个示例,您可以在其中更新单个表中的多个项目。我将主键作为id和范围键作为Datetime。 实际上在dynamodb中没有可用的功能,所以我在这里做的是首先用哈希键和范围键查询所有变量,我想要更新它。一旦所有数据都存储在List中,然后使用它加载数据的散列键和范围键,并使用set更改或更新字段并保存。 由于我在哈希键中进行编辑,因此我们需要将哈希键原始文件删除。如果您需要更新下一个属性,则无需。我还没有添加删除代码自己编写。您可以查询是否有混淆,您的条目将使用哈希键,并且将添加带有新哈希键的新条目。 代码如下:
public static void main(String[] args) {
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
DynamoDBMapper mapper = new DynamoDBMapper(client);
client.setEndpoint("http://localhost:8000/");
String fromDate = "2016-01-13";
String toDate = "2016-02-05";
User user = new User();
user.setId("YourHashKey");
LocalDate frmdate = LocalDate.parse(fromDate, DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate todate = LocalDate.parse(toDate, DateTimeFormatter.ISO_LOCAL_DATE);
LocalDateTime startfrm = frmdate.atStartOfDay();
LocalDateTime endto = todate.atTime(23, 59, 59);
Condition rangeCondition = new Condition().withComparisonOperator(ComparisonOperator.BETWEEN.toString()).withAttributeValueList(new AttributeValue().withS(startfrm.toString()), new AttributeValue().withS(endto.toString()));
DynamoDBQueryExpression<User> queryExpression = new DynamoDBQueryExpression<User>().withHashKeyValues(user).withRangeKeyCondition("DATETIME", rangeCondition);
List<User> latestReplies = mapper.query(User.class, queryExpression);
for (User in : latestReplies) {
System.out.println(" Hashid: " + in.getId() + " DateTime: " + in.getDATETIME() + "location:" + in.getLOCID());
User ma = mapper.load(User.class, in.getId(), in.getDATETIME());
ma.setLOCID("Ohelig");
mapper.save(ma);
}
}