不使用主键的AppSync解析程序查询表/辅助索引



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

primaryKey!=输入

或者干脆省略相等表达式,转而使用其他属性上的表达式?

AppSync文档中说:"查询表达式。必须指定此字段。"在DDB查询的情况下,DDB文档会说:query操作根据主键值查找项目。您可以查询任何具有复合主键(分区键和排序键(的表或辅助索引。

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

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

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

DynamoDB扫描API:

扫描操作通过访问表或辅助索引中的每个项来返回一个或多个项和项属性。为了让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
}

最新更新