在 AppSync 中使用多个begins_with子句查询 DynamoDB



我目前正在尝试使用 AppSync 和 Apache Velocity 模板语言 (VTL( 创建动态查询。

我想用"OR"评估一系列begins_with

如:

{
"operation": "Query",
"query": {
"expression": "pk = :pk and (begins_with(sk,:sk) or begins_with(sk, :sk1)",
"expressionValues": {
":pk": { "S": "tenant:${context.args.tenantId}",
":sk": {"S": "my-sort-key-${context.args.evidenceId[0]}"},
":sk1": {"S": "my-sort-key-${context.args.evidenceId[1]}"}
}
}

但这行不通。我也尝试过使用|而不是or但它也没有奏效。我得到:

无效的键条件表达式:语法错误;标记:"|",近:"( |begins_with" (服务: AmazonDynamoDBv2;

如何使用 VTL 实现此目的?

原始答案

您在begins_with(sk, :sk1)后缺少右括号。也就是说,第三行应该是:

"expression": "pk = :pk and (begins_with(sk,:sk) or begins_with(sk, :sk1))"

我刚刚运行了固定表达式,它按预期工作。

修订

实际上,有微妙之处。

or运算符可以在筛选器表达式中使用,但不能在键条件表达式中使用。例如,只要ab是"常规"属性,a = :v1 and (b = :v2 or b = :v3)就会起作用。如果ab是表的主键(分区键、排序键(,则 DDB 将拒绝查询。

阅读此答案似乎是不可能的,因为 DynamoDB 只接受单个排序键值和单个操作。

操作中也没有"OR"条件: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression

如果还想为排序键提供条件,则必须使用 AND 与排序键的条件结合使用。下面是一个示例,使用 = 比较运算符作为排序键:

我将重组访问模式以更好地匹配我的请求。

相关内容

  • 没有找到相关文章

最新更新