猿问

适用于 Go 的 AWS 开发工具包 - DynamoDb - 向 FilterExpression

我正在尝试使用表达式生成器按多个条件过滤 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"),

}

我已经能够在不使用表达式生成器的情况下完成此操作,但我更愿意使用表达式生成器。我如何向该过滤器添加另一个条件?


长风秋雁
浏览 74回答 1
1回答

慕少森

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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答