【发布时间】:2019-08-16 10:13:02
【问题描述】:
我正在构建 REST API,在 GO 中使用 Lambda 和 DynamoDB。
我需要根据多个过滤器查询数据。
过滤器的数量可以根据用户在调用 REST API 时提供的查询参数的数量而变化。
根据下面的帖子,我已经开发了添加多个条件的代码。
AWS SDK for Go - DynamoDb - Add multiple conditions to FilterExpression
但是当我调用该函数时,我在日志中得到以下错误。-
buildTree 错误:未设置参数:ConditionBuilder
过滤器表达式未应用,扫描返回所有结果。
这里是代码sn-p。
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")))
【问题讨论】:
-
param1Condition和param2Condition的零值是多少?
标签: amazon-web-services go amazon-dynamodb aws-sdk-go