2016-04-06 3 views
1

Как увеличить число в AWS Dynamodb?Природный номер Недвижимость в 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 [email protected]{ 
                @":val":@1 
                }; 
+0

Добавить действие может помочь увеличить существующее значение. –

+0

Я не понимаю, как написать код. Я не могу найти пример в документации о том, как его реализовать. [dynamoDBObjectMapper save: newObject] ObjectMapper только, кажется, вызывает удаление и сохранение не обновляется – csweeney285

ответ

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; 
}]; 
+0

Спасибо. Я не смог найти этот код в документах AWS. – csweeney285

+0

@ csweeney285 приветствую - это сработало? –

+0

Не совсем, но теперь моя проблема заключается в правильной настройке моей updateItemInput.key, которая представляет собой гораздо меньшую проблему. – csweeney285

0

В DynamoDB, если вы хотите увеличить значение любого свойства/поля, вы можете использовать UpdateItemRequest с параметром действия ADD. Я использовал в 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 количества в существующем значение этого поля.

Этот код предназначен для андроида, но техника останется прежней.

спасибо.

+0

Спасибо. Однако я рассмотрел многие из этих методов с объективом c, а эквивалент Obj C AttributeValueUpdate заменяется updateExpressions, с которым я все еще боюсь и выложил новый вопрос об этом. http: //stackoverflow.com/questions/36488229/incrementing-number-property-in-aws-dynamodb-objective-c – csweeney285