我希望使用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;
}];
我得到的物品数量有限,但这些物品是我第一次添加到桌子上,而不是最后一件。
答案 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开发人员指南。