如何将现有的 Dexie 数据库迁移到新的 Dexie 数据库或如何重命名 Dexie 数据库?
How to migrate existing Dexie database to new Dexie database or How to rename Dexie database?
我有一个使用 Dexie 包装器的 indexedDB 的 Web 应用程序,出于某种原因我需要重命名现有的数据库而不会出现故障,我在 Dexie 文档中找不到重命名。
不支持重命名数据库,既不是 Dexie 也不是本地 indexedDB。但是您可以使用以下代码(未测试)克隆数据库:
function cloneDatabase (sourceName, destinationName) {
//
// Open source database
//
const origDb = new Dexie(sourceName);
return origDb.open().then(()=> {
// Create the destination database
const destDb = new Dexie(destinationName);
//
// Clone Schema
//
const schema = origDb.tables.reduce((result,table)=>{
result[table.name] = [table.schema.primKey]
.concat(table.schema.indexes)
.map(indexSpec => indexSpec.src);
return result;
}, {});
destDb.version(origDb.verno).stores(schema);
//
// Clone Data
//
return origDb.tables.reduce(
(prev, table) => prev
.then(() => table.toArray())
.then(rows => destDb.table(table.name).bulkAdd(rows)),
Promise.resolve()
).then(()=>{
//
// Finally close the databases
//
origDb.close();
destDb.close();
});
});
}
我有一个使用 Dexie 包装器的 indexedDB 的 Web 应用程序,出于某种原因我需要重命名现有的数据库而不会出现故障,我在 Dexie 文档中找不到重命名。
不支持重命名数据库,既不是 Dexie 也不是本地 indexedDB。但是您可以使用以下代码(未测试)克隆数据库:
function cloneDatabase (sourceName, destinationName) {
//
// Open source database
//
const origDb = new Dexie(sourceName);
return origDb.open().then(()=> {
// Create the destination database
const destDb = new Dexie(destinationName);
//
// Clone Schema
//
const schema = origDb.tables.reduce((result,table)=>{
result[table.name] = [table.schema.primKey]
.concat(table.schema.indexes)
.map(indexSpec => indexSpec.src);
return result;
}, {});
destDb.version(origDb.verno).stores(schema);
//
// Clone Data
//
return origDb.tables.reduce(
(prev, table) => prev
.then(() => table.toArray())
.then(rows => destDb.table(table.name).bulkAdd(rows)),
Promise.resolve()
).then(()=>{
//
// Finally close the databases
//
origDb.close();
destDb.close();
});
});
}