为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
江户川乱折腾 2023-05-08 16:04:13
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)
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

这个人要问的是在给定数据列表的情况下将数据动态插入到管道中。

我和我的团队正在开发的 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 动态管道


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信