2017-06-05 92 views
2

我想使用的1使用Java AWS-SDK版本1.11.140Dynamodb AWS的Java掃描withLimit不工作

的DynamoDBScanExpression withLimit即使我用.withLimit(1),即

List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1)); 

返回所有條目列表,即7。我做錯了什麼?

P.S.我試着用這個查詢的cli和

aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000 

只給我1個結果。

回答

0

DynamoDBMapper.scan將返回PaginatedScanList - 當用戶執行需要它們的操作時,按需加載分頁結果。某些操作(如size())必須獲取整個列表,但在可能的情況下會逐頁獲取結果。

因此,DynamoDBScanExpression上設置的limit參數是每頁要獲取的最大項目數。

因此,在您的情況下,會返回一個PaginatedList,當您執行PaginatedList.size時,它會嘗試從Dynamodb加載所有項目,每個頁面加載1個項目(每個頁面都是對DynamoDb的提取請求)它會到達PaginatedList的末尾。

,因爲你只在第一個結果感興趣,一個好方法,如果沒有獲取全部來自迪納摩的7個項目是:

Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator(); 
    if (it.hasNext()) { 
     DomainObject dob = (DomainObject) it.next(); 
    } 

與上面的代碼中,只有第一項將取來自dynamodb。

帶走的是:DynamoDBQueryExpression中的limit參數僅用於分頁目的。這是對每頁項目數量的限制,而不是對可請求頁面數量的限制。