在升级时保留 IndexedDB 现有的 ObjectStore 数据

Keep IndexedDB existing ObjectStore data on upgrade

我目前是 运行 具有 3 个 ObjectStores 和以下 onupgradeneeded 函数的 IndexedDB。

var openRequest = indexedDB.open("DB_v3", 1);
openRequest.onupgradeneeded = function(e) { 
    var thisDB = e.target.result;
    if(!thisDB.objectStoreNames.contains("ObjectStore1")) {
        var objectStore = thisDB.createObjectStore("ObjectStore1", {autoIncrement:true});
        objectStore.createIndex("name", "name", {unique:true});
    }
    if(!thisDB.objectStoreNames.contains("ObjectStore2")) {
        //create objectstore & index as above
    }
    if(!thisDB.objectStoreNames.contains("ObjectStore3")) {
        //create objectstore & index as above
    }
}

我现在要做的是添加第 4 个 ObjectStore。 因为我更改了版本并在 onupgradeneeded.

中添加了第 4 个条目
var openRequest = indexedDB.open("DB_v4", 1);
openRequest.onupgradeneeded = function(e) { 

    //same as above

    if(!thisDB.objectStoreNames.contains("ObjectStore4")) {
        //create objectstore & index as above
    }
}

一切正常,但问题是,一旦 onupgradeneeded 被调用,已经存在的 ObjectStores 就会丢失所有数据。
onupgradeneeded 需要如何查看才能保留现有 ObjectStores 的数据?

indexedDB.open("DB_v3", 1) 在版本 1 中打开名为 DB_v3 的数据库。

indexedDB.open("DB_v4", 1) 在版本 1 中打开名为 DB_v4 的数据库。

不同名称的数据库是完全分开的。你不是在升级,你只是在创建两个不同的数据库。如果要升级现有数据库,请保持名称不变并增加版本。那么旧的数据还在。