Rethinkdb,Go:在一个 ReQL 语句中确保 Table 和索引

Rethinkdb, Go: Ensure Table and Index in one ReQL statement

我需要确保 table(s) 在应用程序启动时存在。

如果 table 不存在且需要创建,我还想在 table 上创建二级索引。

在 Go 中很容易完成,但我想在 ReQL 中用一条语句完成。所以我想到了这个:

func ensureTableIndex(ses *r.Session, name string, index string) (err error) {
    err = r.TableList().Contains(name).Do(r.Branch(r.Row, r.Expr(nil), r.Do(func() r.Term {
        return r.TableCreate(name).Do(func() r.Term {
            return r.Table(name).IndexCreate(index)
        })
    }))).Exec(ses)
    return
}

似乎通过了测试。

我的问题是,这是否是一次性完成 table 和索引创建的 correct/efficient 方式?使用 ReQL Do() 函数是否是对多个写入命令进行排序的正确方法?

谢谢

是的,do 是您在 ReQL 中排序操作的正常方式。但是,r.Do 作为 branch 的第三个参数是多余的;您可以直接将 tableCreate 调用放在那里。