在RethinkDB中,检查数据库或表是否存在的最简单方法是什么?

时间:2015-07-25 11:18:30

标签: rethinkdb

我知道我能做到的一种方法是通过dbList()tableList()列出,然后在搜索结果中查找我想要的内容。

有更简单的方法吗?

修改

我的目标是创建一个表,以防它不存在。

4 个答案:

答案 0 :(得分:34)

如果要创建数据库(如果它不存在),或者获取“数据库已存在”之类的值(如果存在),则可以执行以下操作:

r.dbList().contains('example_database')
  .do(function(databaseExists) {
    return r.branch(
      databaseExists,
      { dbs_created: 0 },
      r.dbCreate('example_database')
    );
  }).run();

如果创建了它,将返回以下内容:

{
  "config_changes": [
    {
      "new_val": {
        "id": "1ee7ddb4-6e2c-43bb-a0f5-64ef6a6211a8",
        "name": "example_database"
      },
      "old_val": null
    }
  ],
  "dbs_created": 1
}

如果已经存在,那就是这个:

{
  "dbs_created": 0
}

答案 1 :(得分:7)

对于现有检查表,我找到了以下解决方案:

r.tableList().run(connection); //['people']

这将返回一个在默认数据库中定义的表格数组,例如:['people']。 (如果你想设置它:connection.use('test');)

然后我们可以检查数组是否包含要创建的表名。

_.some(tableNames, tableName)

把它们放在一起:

  if (!_.isNil(tableName) && _.isString(tableName) && !_.isNil(connection)) {
    r.tableList().run(connection).then(function(tableNames) {
      if (_.includes(tableNames, tableName)) {
        return r.tableCreate(tableName).run(connection);
      } else {
        return;
        }
    });
  }

答案 2 :(得分:1)

在JavaScript中,给定一个表名数组,最短的方法是

const tables = ['table1Name', 'table2Name', ...]
const db = 'myDb'

r(tables)
    .difference(r.db(db).tableList())
    .forEach(table => r.db(db).tableCreate(table))
    .run(connection)

答案 3 :(得分:0)

对于来自 VB.net 的任何人,那么解决方案就是这样......一个班轮

@using Microsoft.AspNetCore.Http;
@using Newtonsoft.Json;
@{
    var str = Context.Session.GetString("TaiKhoan");
    var customer = JsonConvert.DeserializeObject<KhachHang>(str);  
}

如果数据库不存在,这将创建数据库,如果它不存在,将创建表

如果两者都不存在,则返回上次创建的表的值

Dim RDBDatabase as String = "dbName" 
Dim RDBTable as String = "tableName"  
   
Dim CheckDB = R.DbList().Contains(RDBDatabase).Do_(Function(databaseExists) R.Branch(databaseExists, "db done", R.DbCreate(RDBDatabase))).And(R.Db(RDBDatabase).TableList().Contains(RDBTable).Do_(Function(tableExists) R.Branch(tableExists, "tb done", R.Db(RDBDatabase).TableCreate(RDBTable)))).Run(conn)