如何使用AWSDynamoDBQueryExpression获取最近添加的十个项目?

时间:2017-02-13 08:33:13

标签: ios xcode amazon-web-services amazon-dynamodb aws-sdk

我希望使用AWSDynamoDBQueryExpression获取最近添加的十个项目(按creationDate排序)。这是我的代码:

AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper];

    AWSDynamoDBQueryExpression *queryExpression = [AWSDynamoDBQueryExpression new];
    queryExpression.keyConditionExpression = @"userId = :authorName AND creationDate > :creationDateVal";
    queryExpression.expressionAttributeValues = @{@":authorName": @"me", @":creationDateVal": @0};
    queryExpression.limit = @10;
    [[dynamoDBObjectMapper query:[Post 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;
             NSLog(@"paginatedOutput = %@", paginatedOutput.items);

         }
         return nil;
     }]; 

我得到的物品数量有限,但这些物品是我第一次添加到桌子上,而不是最后一件。

1 个答案:

答案 0 :(得分:1)

如果您尝试按排序键获取最后10个项目(即上述方案中的creationDate),则可以使用 ScanIndexForward = false(降序)

  

ScanIndexForward - (布尔值)指定索引遍历的顺序:   如果为true(默认),则以递增顺序执行遍历;如果   false,遍历按降序执行。

     

具有相同分区键值的项目按排序顺序存储   排序键。如果排序键数据类型为Number,则存储结果   按数字顺序。对于String类型,结果按顺序存储   ASCII字符代码值。对于Binary类型,DynamoDB会处理每个类型   二进制数据的字节为无符号。

     

如果ScanIndexForward为true,DynamoDB将按顺序返回结果   存储它们(按排序键值)。这是默认值   行为。如果ScanIndexForward为false,则DynamoDB将读取结果   按排序键值反向排序,然后将结果返回给   客户端。

关于限制的说明: -

您需要查询,直到LastEvaluatedKey为空。

  

限制 - (整数)要评估的最大项目数(不是   必然是匹配项目的数量)。如果DynamoDB处理   处理结果时达到限制的项目数量,它会停止   操作并返回到该点的匹配值,并且a   键入LastEvaluatedKey以应用于后续操作,以便   你可以在你离开的地方接你。另外,如果处理了数据集   在DynamoDB达到此限制之前,大小超过1 MB,它会停止   操作并返回匹配值,直到限制和一个键   在LastEvaluatedKey中应用于后续操作以继续   操作。有关更多信息,请参阅Amazon中的查询和扫描   DynamoDB开发人员指南。