2015-07-25 4 views
15

Ein Weg, ich weiß, dass ich es tun kann, ist durch Notieren durch dbList() und tableList() und dann nach was ich in den Ergebnissen suchen.In RethinkDB, was ist der einfachste Weg zu überprüfen, ob eine Datenbank oder eine Tabelle existiert?

Gibt es einen einfacheren Weg?

EDIT

Mein Ziel ist es, eine Tabelle zu erstellen, falls es nicht existiert.

+0

zum Beispiel können Sie versuchen, Tabelle zu erstellen, wenn es existiert bereits, Sie werden Fehler sehen: RqlRuntimeError: Tabelle existiert bereits – Suvitruf

+0

Was versuchen Sie zu erreichen? Möchten Sie eine Datenbank erstellen, wenn sie nicht existiert, oder einfach prüfen, ob sie existiert? – Tholle

+0

@ Suvitruf, danke für die Antwort. Ich war nicht wirklich daran interessiert, einen Fehler zu werfen. Ich wollte nur überprüfen, ob es existiert hat. –

Antwort

26

Wenn Sie möchten, eine Datenbank zu erstellen, wenn es nicht vorhanden ist, oder einen Wert zu erhalten, wie „Datenbank bereits vorhanden ist“, wenn es nicht vorhanden ist, Sie so etwas wie das folgende tun könnte:

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

Es wird wieder die folgenden, wenn es erstellt wird:

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

Und das, wenn es bereits vorhanden ist:

{ 
    "dbs_created": 0 
} 
+1

Sie haben vergessen, .run() am Ende hinzuzufügen, sonst funktioniert es – Wargog

+0

@Wargog Ah, du hast recht. Danke, dass du mich verbessert hast. – Tholle

+4

@Tholle warum so kompliziert? Meine Version mit Python: 'für Tabelle in self.tables: wenn nicht rdb.db (self.db) .table_list(). enthält (Tabelle) .run(): rdb.db (self.db) .table_create (Tabelle) .run() ' – holms

5

Für die Tabelle bestehenden Prüfung habe ich die folgende Lösung gefunden:

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

dies werden Sie wieder eine Reihe von Tabellen, die auf der Standard-DB zum Beispiel definiert werden: [ ‚Menschen‘]. (Wenn Sie es einstellen möchten, tun Sie dies: connection.use ('test');)

dann können wir überprüfen, ob das Array enthält unseren Tabellennamen zu erstellen.

_.some(tableNames, tableName) 

es alle zusammen:

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; 
     } 
    }); 
    } 
0

In JavaScript ein Array von Tabellennamen angegeben, der kürzeste Weg

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

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