Appsync解析器UpdateItem忽略空参数吗?

时间:2018-09-07 22:59:34

标签: amazon-web-services amazon-dynamodb aws-appsync

我正在Appsync解析器中执行此操作:

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "pk" : { "S" : "Container" },
        "id" : { "S" : "${ctx.args.id}" }
    },
    "update" : {
        "expression" : "SET #name = :name, description = :description",
        "expressionNames": {
            "#name" : "name"
        },
        "expressionValues": {
            ":name" : { "S": "${context.arguments.name}" },
            ":description" : { "S": "${context.arguments.description}" },
        }
    }
}

但是有时候我可能不会同时输入名称和描述。当这些args为null时,我如何不设置那些列?

2 个答案:

答案 0 :(得分:3)

您需要做的就是根据需要使用SET expression创建自己的condition checked。在表达式下面检查是否有任何参数是null or empty,我不想更新它。

#set( $expression = "SET" )
#set( $expValues = {} )

## NAME
#if( !$util.isNullOrEmpty(${context.arguments.name}) )
    #set( $expression = "${expression} name = :name" )
    $!{expValues.put(":name", { "S" : "${context.arguments.name}" })}
#end

## DESCRIPTION
#if( !$util.isNullOrEmpty(${context.arguments.description}) ) 
    #if( ${expression} != "SET" ) 
        #set( $expression = "${expression}," )
    #end
    #set( $expression = "${expression} description = :description" )
    $!{expValues.put(":description", { "S" : "${context.arguments.description}" })}
#end

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "pk" : { "S" : "Container" }
        "id" : { "S" : "${context.arguments.id}" }
    },
    "update" : {
        "expression" : "${expression}",
        "expressionValues": $util.toJson($expValues)
    }
}

希望它有用!

答案 1 :(得分:1)

这很有可能。您只需要添加一个简单的if语句来检查该值是否存在。在此处的文档中可以看到一个并行的示例:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-resolvers.html

具体地说,下面的示例将可选参数的应用程序应用于列表操作。

{ "version" : "2017-02-28", "operation" : "Scan" #if( ${context.arguments.count} ) ,"limit": ${context.arguments.count} #end #if( ${context.arguments.nextToken} ) ,"nextToken": "${context.arguments.nextToken}" #end }

只需应用if是否为null即可为您工作。