2017-05-14 4 views
1

Ich versuche, eine App mit AWS Dynamo Db zu erstellen, wollte ich meine Datenbank abfragen oder scannen, aber ich bin in der Lage, die Datenbank mit nur einem Parameter zu scannen, aber ich Ich kann die Datenbank nicht mit einem Array abfragen. Zum Beispiel habe ich eine Tabelle user details in meiner Datenbank, mit einem Primärschlüssel UserID. Ich möchte ein paar Zeilen mit ihrem UserID in einem Array gespeichert.Abfrage AWS Dynamo Db Datenbank mit einem Array

Hier ist der Code, den ich versuchte, aber es funktioniert nicht für mich. Kann mir bitte jemand helfen? Vielen Dank.

NSArray *Array = [[NSArray alloc]initWithObjects:@"001", nil]; 
NSMutableDictionary *Diction = [NSMutableDictionary dictionary]; 
[Diction setObject:[NSString stringWithFormat:@"%@",Array] 
forKey:@":val"]; 


    AWSDynamoDBObjectMapper *dynamoDBObjectMapper = 
[AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper]; 

UserDetails_Male *User = [UserDetails_Male new]; 

AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression 
new]; 

scanExpression.filterExpression = @"UserID = :val"; 
scanExpression.expressionAttributeValues = @{@":val":Array}; 



[[dynamoDBObjectMapper scan:[User class] 
       expression:scanExpression] 
continueWithBlock:^id(AWSTask *task) { 
    if (task.error) { 
     NSLog(@"The request failed. Error: [%@]", task.error); 
    } else { 
     AWSDynamoDBPaginatedOutput *paginatedOutput = task.result; 
     for (UserDetails_Male *book in paginatedOutput.items) { 
      //Do something with book. 
      NSLog(@"Data: %@",book); 
     } 
    } 
    return nil; 
    }]; 


-(void)BatchReq{ 
      AWSDynamoDBKeysAndAttributes * keysAndAttributes = [ 
      AWSDynamoDBKeysAndAttributes new ];  
      AWSDynamoDBAttributeValue * attributeValue2 = [ 
      AWSDynamoDBAttributeValue new ]; 
      attributeValue2.SS = Array;           

      keysAndAttributes.keys = @[ @{ @"UserId" : 
      attributeValue1 }, ]; 
      keysAndAttributes.consistentRead = @YES; 
      AWSDynamoDBBatchGetItemInput * batchGetItemInput = [ 
      AWSDynamoDBBatchGetItemInput new ]; 
      batchGetItemInput.requestItems = @{ @"DynamoDB-OM-Sample" 
      : keysAndAttributes }; 

      AWSDynamoDB * awsDynamoDB = [ AWSDynamoDB defaultDynamoDB 
        ]; 
      [ [ awsDynamoDB batchGetItem: batchGetItemInput ] 
      continueWithExecutor: [ AWSExecutor mainThreadExecutor ] 
       withBlock:^id (AWSTask * task) { 

        if (task.result) { 
         NSLog (@"it's working!!"); 
        } 
        else { 
         NSLog (@"not working... "); 
        } 

        return nil; 
       } ]; 

Antwort

0

Wenn Sie die HashKey als Benutzer-ID festgelegt haben, verwenden Sie die BatchGetItem API alle IDs in dem Array in der Masse zu erhalten.

Sehen Sie mehr über BatchGetItem hier: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html

+0

Hey Vielen Dank für die Beantwortung, ich meine Frage bearbeitet und die Funktion BatchReq hinzugefügt, würde diesen Code zu arbeiten.? oder müsste eine for-Schleife verwenden, um mehrere Attribute zu erstellen und sie als Schlüssel zu übergeben. – Arnvfx

+0

Ich weiß wenig über Objective-C oder Swift. Daher kann ich Ihnen möglicherweise nicht mit dem Code helfen. Ich kann Ihnen den richtigen Ansatz zeigen. –

+1

Hey der Batch-Betrieb funktioniert perfekt, danke – Arnvfx

Verwandte Themen