猿问

为 mongo-go-driver 动态创建聚合管道

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)


江户川乱折腾
浏览 93回答 1
1回答

偶然的你

这个人要问的是在给定数据列表的情况下将数据动态插入到管道中。我和我的团队正在开发的 vue 应用程序也遇到了同样的问题。使用您提供的数据,这是通用模板:给定一片海洋a := []string{"Pacific Ocean", "Indian Ocean"}制作一个类型为 *bson.Value 的大小为 0 的切片b := make([]*bson.Value, 0)遍历海洋切片并将 bson 转换后的值附加到切片 bfor _, 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 动态管道
随时随地看视频慕课网APP

相关分类

Go
我要回答