問題描述
在我的 Android 應(yīng)用程序中,我想從 DynamoDB 查詢數(shù)據(jù).會(huì)有一千個(gè)匹配的項(xiàng)目,但我只想得到前 10 個(gè).我不知道如何設(shè)置這個(gè)限制.我在文檔中找到了這些行:
In my Android app, I want to query data from DynamoDB. There will be a thousand matching items, but I just want to get only the first 10 of them. I don't know how to set this limit. I found these lines in documentation:
DynamoDB 查詢和掃描 API 允許使用 Limit 值來限制結(jié)果的大小.
The DynamoDB Query and Scan APIs allow a Limit value to restrict the size of the results.
在請(qǐng)求中,將 Limit 參數(shù)設(shè)置為您希望 DynamoDB 在返回結(jié)果之前處理的項(xiàng)目數(shù).
In a request, set the Limit parameter to the number of items that you want DynamoDB to process before returning results.
在響應(yīng)中,DynamoDB 返回限制值范圍內(nèi)的所有匹配結(jié)果.例如,如果您發(fā)出限制值為 6 且沒有過濾器表達(dá)式的 Query 或 Scan 請(qǐng)求,則 DynamoDB 會(huì)返回表中與請(qǐng)求中指定的鍵條件匹配的前六個(gè)項(xiàng)目(或僅返回表中的前六個(gè)項(xiàng)目).沒有過濾器的掃描的情況).如果您還提供 FilterExpression 值,DynamoDB 將返回前六個(gè)中也符合過濾器要求的項(xiàng)目(返回的結(jié)果數(shù)將小于或等于 6).
但我找不到設(shè)置響應(yīng)限制的方法.我找到了QueryResult的SetCount方法:
But I cannot find the way to set limit for response. I found the method SetCount of QueryResult:
QueryResult result2 = dynamodb.query(request);
result2.setCount(5);
上面說:那么Count就是應(yīng)用過濾器后返回的項(xiàng)目數(shù)
但我認(rèn)為這不是我想要的.因?yàn)?DynamoDb 在調(diào)用 setCount 之前仍然返回所有匹配項(xiàng).誰能幫幫我?
But I think it is not what I want. Because DynamoDb still returns all the matching items before calling setCount. Can any one help me?
推薦答案
您需要在發(fā)送到 API 的請(qǐng)求中應(yīng)用限制,而不是在響應(yīng)中.
You need to apply the limit as part of the request that you send to the API, not on the response.
我假設(shè)您提交給 dynamodb 對(duì)象的請(qǐng)求對(duì)象是 QuerySpec.您要做的是調(diào)用 withMaxResultSize 在針對(duì) API 運(yùn)行查詢之前傳入您希望應(yīng)用的限制.
I assume the request object you are submitting to the dynamodb object is a QuerySpec. What you will want to do is is call withMaxResultSize to pass in the limit you want applied before the query is run against the API.
但是,正如您在問題中提到的,您需要確保了解 限制:
However, as you mentioned in your question you need to make sure you understand the behavior of limit as described in the DynamoDB documentation on Limits:
在響應(yīng)中,DynamoDB 返回限值的范圍.例如,如果您發(fā)出查詢或掃描限制值為 6 且沒有過濾器表達(dá)式的請(qǐng)求,DynamoDB 返回表中與請(qǐng)求中指定的關(guān)鍵條件(或僅前六項(xiàng)在沒有過濾器的掃描的情況下).如果您還提供FilterExpression 值,DynamoDB 將返回第一個(gè) 中的項(xiàng)目六個(gè)也符合過濾器要求(結(jié)果的數(shù)量返回將小于或等于 6).
In a response, DynamoDB returns all the matching results within the scope of the Limit value. For example, if you issue a Query or a Scan request with a Limit value of 6 and without a filter expression, DynamoDB returns the first six items in the table that match the specified key conditions in the request (or just the first six items in the case of a Scan with no filter). If you also supply a FilterExpression value, DynamoDB will return the items in the first six that also match the filter requirements (the number of results returned will be less than or equal to 6).
這意味著,如果您不使用 FilterExpression,您可能會(huì)沒事.但是,如果您正在過濾結(jié)果,您收到的結(jié)果可能會(huì)少于您的限制,因?yàn)閺募夹g(shù)上講,限制不是要返回的結(jié)果數(shù),而是 DynamoDB 可能返回的項(xiàng)目數(shù).
What this means is that if you are not using a FilterExpression you are likely fine. However, if you are filtering the results you will likely receive fewer than your limit because the limit is technically not the number of results to return rather the number of items DynamoDB could potentially return.
聽起來您在尋求一種方法,讓 DynamoDB 在應(yīng)用 FilterExpression 的同時(shí)將返回的結(jié)果數(shù)量限制為精確數(shù)字.不幸的是,DynamoDB 目前無法做到這一點(diǎn).
It sounds like you are asking for a way to have DynamoDB limit the number of results it returns to an exact number while having a FilterExpression applied. Unfortunately this is currently not possible with DynamoDB.
這篇關(guān)于如何使用 Java 設(shè)置 DynamoDB 返回的匹配項(xiàng)的限制?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!