一尘不染

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

go

我正在尝试使用表达式生成器按多种条件过滤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的情况下完成此操作,但是我更喜欢使用表达式构建器。如何向该过滤器添加其他条件?


阅读 256

收藏
2020-07-02

共1个答案

一尘不染

你可以尝试添加多个条件AndOrNot从方法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)
}

文件资料

2020-07-02