Amazon dynamodb AppSync查询解析程序:是否需要ExpressionName和ExpressionValue?

Amazon dynamodb AppSync查询解析程序:是否需要ExpressionName和ExpressionValue?,amazon-dynamodb,aws-appsync,Amazon Dynamodb,Aws Appsync,AppSync doc说expressionNames和expressionValues是可选字段,但它们总是由代码生成填充。第一个问题,在使用DynamoDB时,是否应将其作为最佳实践包括在内?若然,原因为何 分区键查询的AppSync解析器: { "version": "2017-02-28", "operation": "Query", "query": { "expression": "#partitionKey = :partitionKey",

AppSync doc说
expressionNames
expressionValues
是可选字段,但它们总是由代码生成填充。第一个问题,在使用DynamoDB时,是否应将其作为最佳实践包括在内?若然,原因为何

分区键查询的AppSync解析器:

{
    "version": "2017-02-28",
    "operation": "Query",
    "query": {
        "expression": "#partitionKey = :partitionKey",
        "expressionNames": {
            "#partitionKey": "partitionKey"
        },
        "expressionValues": {
            ":partitionKey": {
                "S": "${ctx.args.partitionKey}"
            }
        }
    }
}

第二个问题,上面代码中
表达式
字段的外行翻译是什么?那句话到底是要DynamoDB做什么?
中的
的用法是什么?“\partitionKey=:partitionKey”
表达式名称和值只是格式保护吗?

让我先回答你的第二个问题:

表达式名称
expressionNames
用于插值。这意味着插值后,该过滤器表达式对象:

"expression": "#partitionKey = :value",
"expressionNames": {
    "#partitionKey": "id"
}
将转变为:

"expression": "id = :value",
#partitionKey
充当列名
id
的占位符<代码>“#”恰好是分隔符

但是为什么呢?
expressionNames
是必需的,因为它是确定的,这意味着您不能在DynamoDB表达式中使用这些词

表达式值 当需要比较DynamoDB表达式中的任何内容时,还需要使用占位符替换实际值,因为DynamoDB类型的值是一个复杂的对象

在以下示例中:

"expression": "myKey = :partitionKey",
"expressionValues": {
    ":partitionKey": {
        "S": "123"
    }
}
:partitionKey
是复数值的占位符

{
    "S": "123"
}
:“
是另一个分隔符,它告诉DynamoDB在替换时使用
表达式值
映射

为什么代码生成总是使用
expressionNames
expressionValues

代码生成逻辑总是使用
expressionNames
expressionValues
更简单,因为保留/非保留DynamoDB字不需要有两条代码路径。使用
expressionNames
将始终防止冲突

让我先回答你的第二个问题:

表达式名称
expressionNames
用于插值。这意味着插值后,该过滤器表达式对象:

"expression": "#partitionKey = :value",
"expressionNames": {
    "#partitionKey": "id"
}
将转变为:

"expression": "id = :value",
#partitionKey
充当列名
id
的占位符<代码>“#”恰好是分隔符

但是为什么呢?
expressionNames
是必需的,因为它是确定的,这意味着您不能在DynamoDB表达式中使用这些词

表达式值 当需要比较DynamoDB表达式中的任何内容时,还需要使用占位符替换实际值,因为DynamoDB类型的值是一个复杂的对象

在以下示例中:

"expression": "myKey = :partitionKey",
"expressionValues": {
    ":partitionKey": {
        "S": "123"
    }
}
:partitionKey
是复数值的占位符

{
    "S": "123"
}
:“
是另一个分隔符,它告诉DynamoDB在替换时使用
表达式值
映射

为什么代码生成总是使用
expressionNames
expressionValues

代码生成逻辑总是使用
expressionNames
expressionValues
更简单,因为保留/非保留DynamoDB字不需要有两条代码路径。使用
expressionNames
将始终防止冲突

嗨,蒂诺。你能在这里帮忙吗?:嘿,蒂诺。你能在这里帮忙吗