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
调用放在那里。
我需要确保 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
调用放在那里。