私がそれを実行できることを確認する1つの方法は、throughdbList()
とtableList()
をリストし、結果に必要なものを探すことです。
もっと簡単な方法はありますか?
[〜#〜]編集[〜#〜]
私の目標は、テーブルが存在しない場合に備えてテーブルを作成することです。
データベースが存在しない場合にデータベースを作成する場合、またはデータベースが存在する場合に「データベースがすでに存在する」などの値を取得する場合は、次のようなことを行うことができます。
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
}
テーブルの既存のチェックについて、私は次の解決策を見つけました:
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;
}
});
}
JavaScriptでは、テーブル名の配列を指定すると、最短の方法は
const tables = ['table1Name', 'table2Name', ...]
const db = 'myDb'
r(tables)
.difference(r.db(db).tableList())
.forEach(table => r.db(db).tableCreate(table))
.run(connection)