web-dev-qa-db-ja.com

RethinkDBで、データベースまたはテーブルが存在するかどうかを確認する最も簡単な方法は何ですか?

私がそれを実行できることを確認する1つの方法は、throughdbList()tableList()をリストし、結果に必要なものを探すことです。

もっと簡単な方法はありますか?

[〜#〜]編集[〜#〜]

私の目標は、テーブルが存在しない場合に備えてテーブルを作成することです。

23
André Pena

データベースが存在しない場合にデータベースを作成する場合、またはデータベースが存在する場合に「データベースがすでに存在する」などの値を取得する場合は、次のようなことを行うことができます。

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
}
35
Tholle

テーブルの既存のチェックについて、私は次の解決策を見つけました:

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

これにより、デフォルトのDBで定義されているテーブルの配列が返されます(例:['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;
        }
    });
  }
7
xyztdanid4

JavaScriptでは、テーブル名の配列を指定すると、最短の方法は

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

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