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

And*_*ena 23 rethinkdb

我知道我可以做的一种方式是通过列出通过dbList()tableList()再想找我想要的结果.

有没有更简单的方法?

编辑

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

Tho*_*lle 35

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

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

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

{
  "config_changes": [
    {
      "new_val": {
        "id": "1ee7ddb4-6e2c-43bb-a0f5-64ef6a6211a8",
        "name": "example_database"
      },
      "old_val": null
    }
  ],
  "dbs_created": 1
}
Run Code Online (Sandbox Code Playgroud)

这个如果它已经存在:

{
  "dbs_created": 0
}
Run Code Online (Sandbox Code Playgroud)

  • @Tholle为何如此复杂?我的版本是python:`for table in self.tables:if if rdb.db(self.db).table_list().contains(table).run():rdb.db(self.db).table_create(table) .RUN()` (4认同)

xyz*_*id4 7

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

r.tableList().run(connection); //['people']
Run Code Online (Sandbox Code Playgroud)

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

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

_.some(tableNames, tableName)
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

  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;
        }
    });
  }
Run Code Online (Sandbox Code Playgroud)