2015-07-25 7 views
15

Un modo per sapere che posso farlo è elencare tramite dbList() e tableList() e quindi cercare quello che voglio nei risultati.In RethinkDB, qual è il modo più semplice per verificare se esiste un database o una tabella?

C'è un modo più semplice?

EDIT

Il mio obiettivo è quello di creare una tabella nel caso in cui non esiste.

+0

per esempio, si può provare a creare la tabella, se si tratta di esiste già, vedrai l'errore: RqlRuntimeError: la tabella esiste già – Suvitruf

+0

Cosa stai cercando di ottenere? Vuoi creare un database se non esiste, o semplicemente controllarne l'esistenza? – Tholle

+0

@Suvitruf, grazie per la risposta. Non ero davvero interessato a lanciare un errore .. Volevo solo verificare se esistesse. –

risposta

26

Se si desidera creare un database se non esiste, o di ottenere un valore come "database esiste già" se esiste, si potrebbe fare qualcosa di simile al seguente:

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

tornerà il seguente se si è creato:

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

E questo se esiste già:

{ 
    "dbs_created": 0 
} 
+1

Hai dimenticato di aggiungere .run() alla fine, altrimenti funziona anche se – Wargog

+0

@Wargog Ah, hai ragione. Grazie per avermi corretto. – Tholle

+4

@ Thholle perché così complicato? la mia versione con python: 'for table in self.tables: se non rdb.db (self.db) .table_list(). contiene (table) .run(): rdb.db (self.db) .table_create (tabella) .run() ' – holms

5

Per la tabella di controllo esistente ho trovato la seguente soluzione:

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

questo vi darà indietro una serie di tabelle che vengono definiti sul predefinita DB per esempio: [ 'persone']. (se si desidera impostarlo, fare: connection.use ('test');)

quindi è possibile verificare se l'array contiene il nome della tabella da creare.

_.some(tableNames, tableName) 

messo tutto insieme:

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, dato un array di nomi di tabella, la via più breve è

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

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