https://godoc.org/github.com/mongodb/mongo-go-driver
我正在尝试动态创建聚合管道。例如,我想读取包含海洋的字符串片段。我试图将它们分解成碎片,但找不到任何添加元素的方法。
pipeline := bson.NewArray(
bson.VC.DocumentFromElements(
bson.EC.SubDocumentFromElements(
"$match",
bson.EC.SubDocumentFromElements("ocean",
bson.EC.ArrayFromElements("$in",
bson.VC.String("Pacific Ocean"),
//bson.VC.String("Indian Ocean"),
),
),
bson.EC.SubDocumentFromElements("callTypeName",
bson.EC.ArrayFromElements("$in",
bson.VC.String("Wookie"),
bson.VC.String("Unknown 13"),
),
),
),
),
)
cur, err := collection.Aggregate(context.Background(), pipeline)
答案 0 :(得分:2)
我认为问题很清楚,不确定第一个评论者是否真的在认真阅读声明。
此人要求的是将给定的数据列表动态地插入数据。
我的团队在一个vue应用程序上遇到了相同的问题,我正在研究。使用您提供的数据,以下是常规模板:
给出一片海洋
a := []string{"Pacific Ocean", "Indian Ocean"}
制作* bson.Value类型的大小为0的切片
b := make([]*bson.Value, 0)
在海洋切片中循环,并将bson转换后的值附加到切片b
for _, v := range a {
b = append(b, bson.VC.String(v))
}
然后创建键值对,以便mongo可以查找匹配项
c := bson.EC.ArrayFromElements("$in", b...)
然后将c传递到管道中
pipeline := bson.NewArray(
bson.VC.DocumentFromElements(
bson.EC.SubDocumentFromElements(
"$match",
bson.EC.SubDocumentFromElements("ocean", c),
),
),
)
这应该使您了解如何动态地为callTypeNames传递管道