我需要确保在应用程序启动时存在表。

如果表不存在并且需要创建,我也想在表上创建二级索引。

在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
}

似乎通过了测试。

我的问题是,这是一次创建表和索引的正确/有效方法吗?使用ReQL Do()函数是对多个写命令进行排序的正确方法吗?

谢谢

最佳答案

是的,do是在ReQL中排序操作的常规方法。不过,r.Do作为branch的第三个参数是多余的;您可以直接将tableCreate调用放在此处。

关于go - Rethinkdb,继续:确保一个ReQL语句中包含表和索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39252553/

10-15 23:57