在我的 Android 应用程序中,我想从 DynamoDB 查询数据。将会有一千个匹配的项目,但我只想获得其中的前 10 个。我不知道如何设置这个限制。我在文档中找到了这些行:
DynamoDB 查询和扫描 API 允许使用限制值来限制结果的大小。
在请求中,将 Limit 参数设置为您希望 DynamoDB 在返回结果之前处理的项目数。
在响应中,DynamoDB 返回 Limit 值范围内的所有匹配结果。例如,如果您发出限制值为 6 且没有过滤器表达式的查询或扫描请求,DynamoDB 将返回表中与请求中指定关键条件匹配的前 6 项(或者仅返回表中的前 6 项)。没有过滤器的扫描的情况)。如果您还提供 FilterExpression 值,DynamoDB 将返回前六个中也符合过滤器要求的项目(返回的结果数将小于或等于 6)。
但我找不到设置响应限制的方法。我找到了QueryResult的SetCount方法:
QueryResult result2 = dynamodb.query(request);
result2.setCount(5);
它说:那么 Count 是应用过滤器后返回的项目数
但我想这不是我想要的。因为DynamoDb在调用setCount之前仍然返回所有匹配的项目。谁能帮我?
您需要将限制作为发送到 API 的请求的一部分应用,而不是在响应中应用。
我假设您提交给 dynamodb 对象的请求对象是查询规范。你想要做的是打电话与最大结果大小在针对 API 运行查询之前传入您想要应用的限制。
但是,正如您在问题中提到的,您需要确保您了解 DynamoDB 文档中所述的 limit 行为Limits:
在响应中,DynamoDB 返回以下范围内的所有匹配结果:
极限值的范围。例如,如果您发出查询或扫描
限制值为 6 且不带过滤器表达式的请求,
DynamoDB 返回表中与
指定请求中的关键条件(或仅前六项)
在没有过滤器的扫描的情况下)。如果您还提供
FilterExpression 值,DynamoDB 将返回项目在第一个
六也符合过滤器要求(结果数
返回的值将小于或等于 6)。
这意味着,如果您不使用 FilterExpression,您可能没问题。但是,如果您过滤结果,您收到的结果可能会少于限制,因为从技术上讲,限制不是要返回的结果数,而是 DynamoDB 可能返回的项目数。
听起来您正在寻求一种方法,让 DynamoDB 在应用 FilterExpression 时将其返回的结果数量限制为精确的数量。不幸的是,目前 DynamoDB 无法实现这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)