我知道我能做到的一种方法是通过dbList()
和tableList()
列出,然后在搜索结果中查找我想要的内容。
有更简单的方法吗?
修改
我的目标是创建一个表,以防它不存在。
答案 0 :(得分:34)
如果要创建数据库(如果它不存在),或者获取“数据库已存在”之类的值(如果存在),则可以执行以下操作:
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
}
答案 1 :(得分:7)
对于现有检查表,我找到了以下解决方案:
r.tableList().run(connection); //['people']
这将返回一个在默认数据库中定义的表格数组,例如:['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;
}
});
}
答案 2 :(得分:1)
在JavaScript中,给定一个表名数组,最短的方法是
const tables = ['table1Name', 'table2Name', ...]
const db = 'myDb'
r(tables)
.difference(r.db(db).tableList())
.forEach(table => r.db(db).tableCreate(table))
.run(connection)
答案 3 :(得分:0)
对于来自 VB.net 的任何人,那么解决方案就是这样......一个班轮
@using Microsoft.AspNetCore.Http;
@using Newtonsoft.Json;
@{
var str = Context.Session.GetString("TaiKhoan");
var customer = JsonConvert.DeserializeObject<KhachHang>(str);
}
如果数据库不存在,这将创建数据库,如果它不存在,将创建表
如果两者都不存在,则返回上次创建的表的值
Dim RDBDatabase as String = "dbName"
Dim RDBTable as String = "tableName"
Dim CheckDB = R.DbList().Contains(RDBDatabase).Do_(Function(databaseExists) R.Branch(databaseExists, "db done", R.DbCreate(RDBDatabase))).And(R.Db(RDBDatabase).TableList().Contains(RDBTable).Do_(Function(tableExists) R.Branch(tableExists, "tb done", R.Db(RDBDatabase).TableCreate(RDBTable)))).Run(conn)