AWS SDK для Go - DynamoDb - добавление нескольких условий в FilterExpression - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь отфильтровать сканирование DynamoDb по нескольким условиям, используя построитель выражений. Согласно этому сообщению в блоге , попытка добавить другое условие в компоновщик перезапишет предыдущее условие. Должен быть какой-то способ добавить другое условие, но я не смог найти способ сделать это.

Это не сработает

cond1 := expression.Name("foo").Equal(expression.Value(5))
cond2 := expression.Name("bar").Equal(expression.Value(6))
expr, err := expression.NewBuilder().
    WithCondition(cond1).
    WithCondition(cond2).
    Build()
if err != nil {
fmt.Println(err)

}

Это рабочий пример с одним фильтром

filt := expression.Name("Artist").Equal(expression.Value("No One You Know"))
proj := expression.NamesList(
    expression.Name("SongTitle"),
    expression.Name("AlbumTitle"),
)
expr, err := expression.NewBuilder().
WithFilter(filt).
WithProjection(proj).
Build()
if err != nil {
  fmt.Println(err)
}

input := &dynamodb.ScanInput{
  ExpressionAttributeNames:  expr.Names(),
  ExpressionAttributeValues: expr.Values(),
  FilterExpression:          expr.Filter(),
  ProjectionExpression:      expr.Projection(),
  TableName:                 aws.String("Music"),
}

Я смог выполнить это без использования выражения buidler, но я бы предпочел использовать построитель выражений. Как я могу добавить другое условие к этому фильтру?

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете попробовать добавить несколько условий с помощью методов And, Or и Not из структуры ConditionBuilder. Пример:

cond1 := expression.Name("foo").Equal(expression.Value(5))
cond2 := expression.Name("bar").Equal(expression.Value(6))
expr, err := expression.NewBuilder().
    WithCondition(cond1.And(cond2)).
    Build()
if err != nil {
    fmt.Println(err)
}

Документация .

...