在 Golang 中动态创建 MongoDB Pipeline

Posted

技术标签:

【中文标题】在 Golang 中动态创建 MongoDB Pipeline【英文标题】:Dynamically create MongoDB Pipeline in Golang 【发布时间】:2022-01-10 03:14:09 【问题描述】:

所有, 我正在使用 MongoDB/Golang 驱动程序并使用以下 Golang 代码来构建管道。我已经成功地对此进行了测试,并且可以正常工作:

.
.
matchStage := bson.D
                    "$match",bson.D
                       "$or", bson.A
                            bson.D"featureA","string123",
                            bson.D"featureA","string456",
                            bson.D"featureA","string789",
                            bson.D"featureA","string012",
                       ,
                    ,

filterCursor, err := collection.Aggregate(ctx, mongo.PipelinematchStage)
.
.

我的问题是,假设我将 bson.D 值作为切片输入,如何动态构建此查询?具体来说,我提前知道了“featureA”的关键,并被喂了一片:

features := []string"string123", "string456", "string"789", "string012"

我知道这必须相对简单,但我已经为此绞尽脑汁好几个小时了,循环切片、json 编组/解组等。

【问题讨论】:

【参考方案1】:

你可以这样做:

featureExpr:=bson.A
for _,f:=range features 
    featureExpr=append(featureExpr,bson.D"featureA",f)

matchStage := bson.D
                    "$match",bson.D"$or", featureExpr,

【讨论】:

哇!那是快速而简单的。非常感谢布拉克。那成功了。非常感谢。

以上是关于在 Golang 中动态创建 MongoDB Pipeline的主要内容,如果未能解决你的问题,请参考以下文章

如何在mongodb聚合中将动态值传递给$ in

text 在Raspberry PI #linux上安装Golang

Golang GraphQL MongoDB 努力从数据库中获取日期和 ID

如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

在golang中无法通过ObjectId获取mongodb记录

在 Golang 和 MongoDB 中将路由拆分为单独的包