AWS DynamoDB iOS查询

时间:2015-09-15 19:44:14

标签: ios objective-c amazon-web-services amazon-dynamodb

我遵循官方AWS指南中的教程,但没有解释的是如何查询二级索引,我自己创建的索引。那么我将在queryExpression上调用什么方法以及如何使用该方法(如果我说三个二级索引并且它们每个都应该有一个给定的查询值,我该怎么办?)

1 个答案:

答案 0 :(得分:0)

来自AWS DynamoDB IOS开发人员指南:

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/dynamodb_om.html

  

使用Query API可以查询表或辅助索引。您   必须在AWSDynamoDBQueryExpression中提供哈希键值。要查询   索引,还必须指定indexName。你必须指定   hashKeyAttribute如果查询具有不同的全局辅助节点   散列键。如果表或索引具有范围键,则可以选择   通过提供范围键值和条件来细化结果。该   query:expression:方法有两个参数 - 类的   生成的对象和AWSDynamoDBQueryExpression的实例。在里面   下面的例子,我们查询Books索引表来查找所有书籍   与“约翰史密斯”的作者和价格低于50:

它会是这样的:

AWSDynamoDBQueryExpression *queryExpression = [AWSDynamoDBQueryExpression new];

queryExpression.indexName = @"Author-Price-index";

queryExpression.hashKeyAttribute = @"Author";
queryExpression.hashKeyValues = @"John Smith";

queryExpression.rangeKeyConditionExpression = @"Price < :val";
queryExpression.expressionAttributeValues = @{@":val":@50};

[[dynamoDBObjectMapper query:[Book class]
          expression:queryExpression]
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) {
         AWSDynamoDBPaginatedOutput *paginatedOutput = task.result;
         for (Book *book in paginatedOutput.items) {
             //Do something with book.
         }
     }
     return nil;
 }];