Amazon dynamodb AppSync查询解析程序:是否需要ExpressionName和ExpressionValue?
AppSync doc说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",
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
将始终防止冲突 嗨,蒂诺。你能在这里帮忙吗?:嘿,蒂诺。你能在这里帮忙吗