我正在构建 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")))