2017-02-13 17 views
0

AWSDynamoDBQueryExpressionを使用して、最近追加されたアイテムのうち10アイテム(creationDateでソート)を取得したいとします。私のコードは次のとおりです:最近追加されたAWSDynamoDBQueryExpressionを使用して10個のアイテムを取得する方法は?

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; 
    }]; 

私は10項目に制限されていますが、これらの項目は私がテーブルに追加した最後のものではありません。

+0

creationDateの最後の10項目を取得しようとしていますか? – notionquest

+0

@notionquestはい。ありがとうございます – instback

+0

以下は役に立ちましたか? – notionquest

答えて

1

ソートキー(上記のシナリオではcreationDate)で最後の10個のアイテムを取得する場合は、ScanIndexForward = false(降順)を使用できます。 -

ScanIndexForward(ブール値)インデックス・トラバーサルのための順序を指定します: trueの場合(デフォルト)、トラバーサルは昇順で実行されます。 がfalseの場合、トラバーサルは降順で実行されます。

同じパーティションキー値を持つ項目は、並べ替え順に ソートキーで格納されます。ソートキーのデータ型がNumberの場合、結果は数値順に に格納されます。文字列型の場合、結果はASCII文字コード値 の順に格納されます。バイナリタイプの場合、DynamoDBはバイナリデータの各 バイトを符号なしとして扱います。

ScanIndexForwardがtrueの場合、結果は、ソートキー値によって格納された の順番で返されます。これがデフォルトの の動作です。 ScanIndexForwardがfalseの場合、DynamoDBは結果を ソートキー値で逆順に読み取り、結果を クライアントに返します。リミットの

注: - あなたはLastEvaluatedKeyがnullになるまで照会する必要が

リミット - (整数)アイテムの最大数(ない 必ずしも一致する項目の数)を評価します。結果の処理中に 個のアイテムを処理すると、操作が終了し、そのポイントまで一致する値が返され、LastEvaluatedKeyの キーがその後の操作に適用されるので、 あなたが中断したところで拾う。また、処理されたデータセット がDynamoDBがこの制限に達する前に1 MBを超えると、 操作を停止し、一致する値を上限まで返し、LastEvaluatedKeyの キーを後の操作に適用して 操作を続行します。詳細については、Amazon DynamoDBデベロッパーガイドのクエリとスキャンを参照してください。

+0

** scanIndexForward **のコード: 'queryExpression.scanIndexForward = @NO;'ありがとうございました – instback

関連する問題