【问题标题】:AWS SDK for Go - DynamoDb - Add multiple conditions to FilterExpression适用于 Go 的 AWS 开发工具包 - DynamoDb - 向 FilterExpression 添加多个条件
【发布时间】:2019-04-04 00:29:49
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    Documentation.

    【讨论】:

    • 谢谢!我知道我必须遗漏一些东西。
    • 我尝试使用类似的表达式,但出现错误 - buildTree error: unset parameter: ConditionBuilder
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2013-03-21
    • 2020-07-30
    相关资源
    最近更新 更多