【问题标题】:How to use filter in BatchGetItem如何在 BatchGetItem 中使用过滤器
【发布时间】:2019-09-25 01:24:35
【问题描述】:

我正在使用 BatchGetItem 从 dynamodb 获取多个项目。但我需要根据某些条件过滤项目。

例如:我有一个具有 id 和状态的任务表。我需要获取 id 为 1、2、3 的项目,其中 status=done。

#set($ids = [1,2,3])
{    
    "operation" : "BatchGetItem",
    "tables" : {
        "userTable": {
            "keys": $util.toJson($ids)
        }
    }
}

【问题讨论】:

    标签: amazon-dynamodb aws-appsync


    【解决方案1】:

    BatchGetItem 不支持过滤器表达式。将BatchGetItem 视为GetItem 操作的批处理版本。 GetItem 仅支持根据主键检索项目。

    在您的示例中,如果 status 列不是主键的一部分,那么 BatchGetItemGetItem 将不适合您。

    如果您的示例中的任务表有 id 作为分区键,status 作为常规列,那么您可以通过多种方式获得相同的结果,具体取决于您的餐桌以及您希望退回的商品数量。

    在代码中使用BatchGetItem 过滤项目

    如果输入项的数量比较少,你可以只使用BatchGetItem,然后在代码中(这里在VTL中)过滤掉status!=done所在的那些。

    优点:您无需更改表架构或添加索引

    缺点:您将支付在过滤前检索项目所需的所有读取容量单位。由于您的 API 会下载可能不必要的项目,因此还会产生延迟成本。

    使用Scan 和 IN 表达式

    如果表很小,您可以扫描整个表并提供 IN 过滤器表达式。

    优点:您无需更改表架构或添加索引

    缺点:您必须扫描整个表,这对于大型表来说会很慢且成本很高。

    如果您不希望更改表键架构,这些建议是有效的。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2013-12-16
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多