首页 > 解决方案 > 不使用主键的 AppSync 解析器查询表/二级索引

问题描述

从官方AWS 文档看来,要在 dynamodb 中查询项目,需要为主键提供一个相等键表达式。但是,AppSync 文档没有明确说明这一点。我想知道在解析器中是否可以在不为索引或表的主键提供相等键表达式的情况下查询 dynamodb?例如,我可以执行以下操作:

primaryKey != 输入

或者干脆完全省略相等表达式并使用其他属性的表达式?

标签: amazon-web-servicesamazon-dynamodbaws-appsync

解决方案


可以在不提供主键(或索引)的键条件表达式的情况下从 DynamoDB 中检索记录,但您必须使用该Scan操作来访问表(或索引)中的每个项目。

AWS 的AppSync 扫描文档中的一个示例:

{
  "version" : "2017-02-28",
  "operation" : "Scan",
  "filter" : {
    "expression" : "begins_with(title, :title)",
    "expressionValues" : {
      ":title" : { "S" : "${context.arguments.title}" }
    },
  }
}

DynamoDB 扫描 API

Scan 操作通过访问表或二级索引中的每个项目来返回一个或多个项目和项目属性。要让 DynamoDB 返回更少的项目,您可以提供 FilterExpression 操作。

关于您关于查找与特定主键不匹配的项目的具体问题:

primaryKey != 输入

如果您的 primaryKey 是分区键 + 排序键的组合,则应考虑使用带括号的NOT和逻辑运算符:AND

{
  "version": "2017-02-28",
  "operation": "Scan",
  "filter": {
    "expression": "NOT (#PK = :PK AND #SK = :SK)",
    "expressionNames": {"#PK": "PK", "#SK": "SK"},
    "expressionValues": {
      ":PK":{"S":"some-partition-key"},
      ":SK":{"S":"some-sort-key"}
    },
  },
  "consistentRead": true,
  "limit": 10
}

推荐阅读