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

如何在 gorethink 中使用 r.Do 和 r.Branch?

如何在 gorethink 中使用 r.Do 和 r.Branch?

Go
MMMHUHU 2021-11-08 19:34:40
我正在 gorethink 中寻找 r.Do() 和 r.Branch() 函数的清晰示例。
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

Go RethinkDB driver 的作者在 Github 上非常活跃,如果在那里问你可能会得到更快的答案。


下面是一个例子Do。


    res, _ := r.DB("test").Table("table").Get("ID").Do(func(issue r.Term) r.Term {

        return issue.Merge(map[string]string{

            "new_field": "new_value",

        })

    }).Run(session)

    var b []interface{}

    a.All(&b)

    fmt.Println(b)

我认为最重要的是确保我们声明正确的类型Term。我导入 RethinkDB 驱动程序,r所以我使用r.Term. 然后在Do函数内部,您可以使用来自 Term 的任何命令:https : //godoc.org/github.com/dancannon/gorethink#Term


的一个例子Do,并Branch在同一时间:


    r.DB("test").Table("issues").Insert(map[string]interface{}{

        "id": 1111,

    }).Do(func(result r.Term) r.Term {

        return r.Branch(result.Field("inserted").Gt(0),

            r.DB("test").Table("log").Insert(map[string]interface{}{

                "time":   r.Now(),

                "result": "ok",

            }),

            r.DB("test").Table("log").Insert(map[string]interface{}{

                "time":   r.Now(),

                "result": "failed",

            }))

    }).Run(session)

基本上,在里面Do,我们可以访问之前 RethinkDB 函数调用的返回值,并且我们可以像在Map函数中一样继续在该返回值上调用 ReQL 命令。


在里面Branch,我们传递了 3 个参数,都是TermGo RethinkDB 驱动中的类型。也可以参考官方示例:https : //godoc.org/github.com/dancannon/gorethink#Branch


由于语言的性质,无法适应与官方驱动程序(Ruby,Python,JS)相同的动态风格,因此熟悉Go驱动程序有点困难。在语言中更令人困惑的是我们不能链接命令。


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

添加回答

举报

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