AWS DynamoDB中的增量编号属性

时间:2016-04-06 19:21:42

标签: amazon-web-services counter amazon-dynamodb updates

如何在AWS Dynamodb中增加数字?

指南说保存项目时只需重新保存: http://docs.aws.amazon.com/mobile/sdkforios/developerguide/dynamodb_om.html

但是我试图使用一个计数器,许多用户可能同时更新。

其他文档告诉我使用和UpdateItem操作,但我找不到一个很好的例子。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html

但是,我找不到实现表达式的方法。将来我将为数组和地图添加值。这会是一样的吗?我的代码在Obj C

目前我的代码如下:

AWSDynamoDBUpdateItemInput *updateItemInput = [AWSDynamoDBUpdateItemInput new];
        updateItemInput.tableName = @"TableName";
        updateItemInput.key = @{
                                UniqueItemKey:@"KeyValue"
                                };
        updateItemInput.updateExpression = @"SET counter = counter + :val";
        updateItemInput.expressionAttributeValues =@{
                                                     @":val":@1
                                                     };

2 个答案:

答案 0 :(得分:1)

您似乎错过了实际发出更新项请求的最后一段代码:

AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];

[[dynamoDB updateItem:updateItemInput]
continueWithBlock:^id(AWSTask *task) {
    if (task.error) {
        NSLog(@"The request failed. Error: [%@]", task.error);
    }
    if (task.exception) {
        NSLog(@"The request failed. Exception: [%@]", task.exception);
    }
    if (task.result) {
        //Do something with result.
    }
    return nil;
}];

答案 1 :(得分:0)

在DynamoDB中,如果要增加任何属性/字段的值,可以使用带有操作选项ADD的UpdateItemRequest。我在android中使用这种方法会更新该字段的现有值。让我分享一下代码段。您可以使用添加,删除,放置等任何操作。

.....
AttributeValue viewcount = new AttributeValue().withS("100");
AttributeValueUpdate attributeValueUpdate = new AttributeValueUpdate().withAction(AttributeAction.ADD).withValue(viewcount);
updateItems.put(UploadVideoData.FIELD_VIEW_COUNT, attributeValueUpdate);

UpdateItemRequest updateItemRequest = new UpdateItemRequest().withTableName(UploadVideoData.TABLE_NAME)
                                .withKey(primaryKey).withAttributeUpdates(updateItems);

UpdateItemResult updateItemResult = amazonDynamoDBClient.updateItem(updateItemRequest);
....

您可以看到上面的代码会将100个计数添加到该字段的现有值中。

此代码适用于Android,但该技术将保持不变。

谢谢。