Я создаю REST API, используя Lambda и DynamoDB в GO.
Мне нужно запросить данные на основе нескольких фильтров.
Количество фильтров может варьироваться в зависимости от количества параметров запроса, предоставленных пользователем при вызове REST API.
Согласно приведенному ниже сообщению, я разработал код для добавления нескольких условий.
AWS SDK для Go - 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")))