首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Golang过滤器构建器过滤空值?

如何使用Golang过滤器构建器过滤空值?
EN

Stack Overflow用户
提问于 2019-04-30 17:07:26
回答 2查看 954关注 0票数 1

How to filter on NULL?开始,我一直在努力复制Go代码来过滤特定列的空值:

代码语言:javascript
复制
import (
        "github.com/apex/log"
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/aws/endpoints"
        "github.com/aws/aws-sdk-go-v2/aws/external"
        "github.com/aws/aws-sdk-go-v2/service/dynamodb"
        "github.com/aws/aws-sdk-go-v2/service/dynamodb/expression"
)

// aws --profile dd dynamodb scan --table-name plocal2 --filter-expression 'paymentmethod = :null' --expression-attribute-values '{":null" :{"NULL":true}}'

var table = "plocal2"

func main() {
        cfg, err := external.LoadDefaultAWSConfig(external.WithSharedConfigProfile("dd"))
        if err != nil {
                log.WithError(err).Fatal("setting up credentials")
                return
        }
        cfg.Region = endpoints.ApSoutheast1RegionID
        db := dynamodb.New(cfg)
        filt := expression.Name("paymentmethod").Equal(expression.Value(expression.Null))
        expr, err := expression.NewBuilder().
                WithFilter(filt).
                Build()
        if err != nil {
                log.WithError(err).Error("failed to build expression")
                return
        }
        scanReq := db.ScanRequest(&dynamodb.ScanInput{
                ExpressionAttributeValues: expr.Values(),
                FilterExpression:          expr.Filter(),
                TableName:                 aws.String(table),
        })
        result, err := scanReq.Send()
        if err != nil {
                log.WithError(err).Error("failed to query table")
                return
        }
        log.Infof("%d", len(result.Items))
}

错误是:

代码语言:javascript
复制
2019/04/30 16:59:54 error failed to query table     error=ValidationException: Invalid FilterExpression: An expression attribute name used in the document path
 is not defined; attribute name: #0
        status code: 400, request id: 8CFTOAGVB7M1IM3DC6BFPEVLUNVV4KQNSO5AEMVJF66Q9ASUAAJG

有没有关于如何使用expression builder进行调试或者哪里出了问题的提示

真希望有examples,因为过滤NULL对我来说应该是一个很常见的用例,如果有人使用MarshalMap的话,因为空字符串变成了NULL!

EN

回答 2

Stack Overflow用户

发布于 2021-10-27 14:37:14

#better-late-than-never希望帮助像我一样努力使用discover the secret to filtering NULL values的其他人使用aws-sdk-go-v2 expression包:

代码语言:javascript
复制
filt := expression.Name("paymentmethod").
        Equal(expression.Value(&types.AttributeValueMemberNULL{Value: true})
票数 1
EN

Stack Overflow用户

发布于 2021-11-09 12:15:18

在aws-sdk-go (v1) https://github.com/aws/aws-sdk-go/blob/main/service/dynamodb/expression/condition.go#L71

expresion.Null

示例:

代码语言:javascript
复制
const endTsField = "end_ts"
filterNoEndTime := expression.Name(endTsField).AttributeNotExists()
filterNull := expression.Name(endTsField).NotEqual(expression.Value(expression.Null))
filterEndTime := expression.Name(endTsField).GreaterThanEqual(expression.Value(time.Now().UTC().UnixMilli()))
filter := filterNoEndTime.Or(filterEndTime).Or(filterNull)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55917515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档