2016-04-06 13 views
1

Wie kann ich eine Zahl in AWS Dynamodb erhöhen?Inkrementnummer-Eigenschaft in AWS DynamoDB

Der Führer sagt, wenn ein Element Speicher einfach erneut zu speichern: http://docs.aws.amazon.com/mobile/sdkforios/developerguide/dynamodb_om.html

aber ich versuche, einen Zähler zu verwenden, wo viele Benutzer gleichzeitig updaten können.

Andere Dokumentation hat mir gesagt, zu verwenden und UpdateItem Betrieb, aber ich kann kein gutes Beispiel dafür finden.

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

Ich kann aber nicht eine Methode finden, die Expression zu implementieren. In der Zukunft werde ich Werte zu Arrays und Karten hinzufügen. Wird das das Gleiche sein? Mein Code ist in Obj C

Derzeit mein Code wie folgt aussieht:

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

Aktion hinzufügen kann helfen, den vorhandenen Wert zu erhöhen. –

+0

Ich verstehe nicht, wie man den Code schreibt. Ich finde kein Beispiel in der Dokumentation zur Implementierung. [dynamoDBObjectMapper speichern: newObject] ObjectMapper scheint nur zu löschen und speichern nicht zu aktualisieren – csweeney285

Antwort

1

Es sieht aus wie Sie das letzte Stück Code sind vermisst, die die Update Artikel Anfrage tatsächlich macht:

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

Vielen Dank. Ich konnte diesen Code in AWS-Dokumenten nicht finden. – csweeney285

+0

@ csweeney285 Gern geschehen - hat es funktioniert? –

+0

Nicht ganz, aber mein Problem ist jetzt richtig zu konfigurieren mein updateItemInput.key, die ein viel kleineres Problem ist. – csweeney285

0

Wenn Sie in DynamoDB den Wert eines beliebigen Elements/Felds erhöhen möchten, können Sie das UpdateItemRequest mit der Aktionsoption ADD verwenden. Ich benutzte in Android diese Methode würde den vorhandenen Wert des Feldes aktualisieren. Lass mich das Code-Snippet teilen. Sie können alle Aktionen verwenden so wie hinzufügen, löschen, setzen usw.

..... 
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); 
.... 

Sie können den obigen Code sehen 100 Zählung in den vorhandenen Wert dieses Feldes hinzufügen.

Dieser Code ist für Android, aber die Technik würde gleich bleiben.

Vielen Dank.

+0

Vielen Dank, aber ich habe viele dieser Methoden mit Ziel c untersucht und Obj Cs Äquivalent von AttributeValueUpdate wird durch updateExpressions ersetzt, mit denen ich immer noch zu kämpfen habe und eine neue Frage dazu gestellt habe. //stackoverflow.com/questions/36488229/incrementing-number-property-in-aws-dynamodb-objective-c – csweeney285

Verwandte Themen