2

我正在构建 REST API,在 GO 中使用 Lambda 和 DynamoDB。

我需要根据多个过滤器查询数据。

过滤器的数量可以根据用户在调用 REST API 时提供的查询参数的数量而变化。

根据下面的帖子,我开发了添加多个条件的代码。

适用于 Go 的 AWS 开发工具包 - DynamoDb - 向 FilterExpression 添加多个条件

但是当我调用该函数时,我在日志中得到以下错误。-

buildTree 错误:未设置参数:ConditionBuilder

不应用过滤器表达式,扫描返回所有结果。

这是代码片段。

for queryParam, queryParamValue := range searchParams {
        fmt.Println("queryParam:", queryParam, "=>", "queryParamValue:", queryParamValue)
        if queryParam == “param1” {
            param1Condition = expression.Name(“param1”).Equal(expression.Value(queryParamValue))
        }

        if queryParam == “param2” {
            param2Condition = expression.Name(“param2”).Equal(expression.Value(queryParamValue))
        }   
    }


sampleExpr, errSample := expression.NewBuilder().
        WithCondition(param1Condition.Or(param2Condition)).
        Build()
    if errSample != nil {
        fmt.Println("Error in building Sample Expr ", errSample)
    } else {
        fmt.Println("sampleExpr ", sampleExpr)
    }

    input := &dynamodb.ScanInput{
        ExpressionAttributeNames:  sampleExpr.Names(),
        ExpressionAttributeValues: sampleExpr.Values(),
        FilterExpression:          sampleExpr.Filter(),
        TableName:                 aws.String(deviceInfotable),
    }

但是,如果我以不同的方式创建表达式,它就会起作用。

filt := expression.Name("param1").Equal(expression.Value("valu1")).Or(expression.Name("param2").Equal(expression.Value("value2")))
4

1 回答 1

0
于 2019-03-26T10:37:01.437 回答