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

时间:2015-10-04 09:07:28

标签: go rethinkdb

我在gorethink中寻找r.Do()和r.Branch()函数的明确例子。

1 个答案:

答案 0 :(得分:3)

Go RethinkDB驱动程序的作者在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

中的任何命令

同时DoBranch的示例:

    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之前的funciton调用的返回值,并且我们可以继续在Map函数中对该返回值调用ReQL命令。

Branch内,我们传递了3个参数,在Go RethinkDB驱动程序中都是Term类型。您还可以参考官方示例:https://godoc.org/github.com/dancannon/gorethink#Branch

由于语言的本质而难以熟悉Go驱动程序,并且不能适应官方驱动程序(Ruby,Python,JS)的相同动态风格。它在语言中更加令人困惑,我们无法链接命令。