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

时间:2018-10-30 21:32:53

标签: amazon-web-services go amazon-dynamodb

我正在尝试使用表达式生成器按多种条件过滤DynamoDb扫描。根据此blog post,尝试在构建器中添加另一个条件将覆盖先前的条件。必须有某种方法可以添加其他条件,但是我一直无法找到一种方法来添加它。

这行不通

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 :(得分:1)

您可以尝试使用And结构中的OrNotConditionBuilder方法添加多个条件。示例:

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)
}