2015-07-25 17 views
15

Jednym ze sposobów, w jaki mogę to zrobić, jest wpisanie przez dbList() i tableList(), a następnie poszukiwanie tego, co chcę w wynikach.W RethinkDB, jaki jest najłatwiejszy sposób sprawdzenia, czy istnieje baza danych lub tabela?

Czy jest łatwiejszy sposób?

EDIT

Moim celem jest stworzenie tabeli w przypadku, gdy nie istnieje.

+0

na przykład można spróbować stworzyć tabelę, jeśli jest to już istnieje, pojawi się błąd: RqlRuntimeError: Tabela już istnieje – Suvitruf

+0

Co próbujesz osiągnąć? Czy chcesz utworzyć bazę danych, jeśli nie istnieje, lub po prostu sprawdzić, czy istnieje? – Tholle

+0

@Suvitruf, dzięki za odpowiedź. Nie byłem naprawdę zainteresowany wyrzuceniem błędu. Chciałem tylko sprawdzić, czy istnieje. –

Odpowiedz

26

Jeśli chcesz utworzyć bazę danych, jeśli nie istnieje, lub uzyskać wartość jak „baza danych już istnieje”, jeśli ona istnieje, można zrobić coś jak następuje:

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

on powróci następujące informacje, jeśli zostanie on utworzony:

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

I jeśli już istnieje:

{ 
    "dbs_created": 0 
} 
+1

Zapomniałeś dodać .run() na końcu, w przeciwnym razie działa – Wargog

+0

@Wargog Ach, masz rację. Dzięki za poprawienie mnie. – Tholle

+4

@ Tholle, dlaczego tak skomplikowane? moja wersja z pythonem: 'dla tabeli w self.tables: jeśli nie rdb.db (self.db) .table_list(). zawiera (tabela) .run(): rdb.db (self.db) .table_create (tabela) .run() ' – holms

5

Na stole istniejącej kontroli Znalazłem następujące rozwiązanie:

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

to daje z powrotem tablicę tabel, które są zdefiniowane na domyślnym DB na przykład: [ „Ludzie”]. (jeśli chcesz go ustawić, wykonaj to: connection.use ('test');)

następnie możemy sprawdzić, czy tablica zawiera naszą nazwę tabeli do utworzenia.

_.some(tableNames, tableName) 

umieścić to wszystko razem:

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

W JavaScript, biorąc pod tablicą nazw tabel, najkrótsza droga jest

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

r(tables) 
    .difference(r.db(db).tableList()) 
    .forEach(table => r.db(db).tableCreate(table)) 
    .run(connection) 
Powiązane problemy