Mka*_*aur 1 amazon-dynamodb aws-appsync
我正在使用 BatchGetItem 从 dynamodb 获取多个项目。但我需要根据某些条件过滤项目。
例如:我有一个具有 id 和状态的任务表。我需要获取 id 1、2、3 的项目,其中 status=done。
#set($ids = [1,2,3])
{
"operation" : "BatchGetItem",
"tables" : {
"userTable": {
"keys": $util.toJson($ids)
}
}
}
Run Code Online (Sandbox Code Playgroud)
不支持过滤表达式BatchGetItem。可以将其视为操作BatchGetItem的批处理版本GetItem。GetItem仅支持根据主键检索项目。
在您的示例中,如果该status列不是主键的一部分,则BatchGetItem或GetItem将不适用于您。
假设示例中的任务表将id作为分区键,将status作为常规列,则可以通过多种方法获得相同的结果,具体取决于表的大小和期望返回的项目数。
BatchGetItem与代码中的过滤项一起使用如果输入项的数量相对较少,您可以只使用BatchGetItem,然后在代码中(在 VTL 中)过滤掉其中的项status!=done。
优点:您不需要更改表架构或添加索引
缺点:您需要支付过滤前检索项目所需的所有读取容量单位的费用。由于您的 API 会下载潜在不必要的项目,因此还会产生延迟成本。
Scan与 IN 表达式一起使用如果表很小,您可以扫描整个表并提供 IN 过滤表达式。
优点:您不需要更改表架构或添加索引
缺点:您必须扫描整个表,这对于大型表来说会很慢且成本高昂。
如果您不希望更改表键架构,这些建议是有效的。
| 归档时间: |
|
| 查看次数: |
2997 次 |
| 最近记录: |