gpt4 book ai didi

indexeddb - 在索引数据库升级时更新对象存储的现有索引键路径

转载 作者:行者123 更新时间:2023-12-02 11:26:49 24 4
gpt4 key购买 nike

我正在使用索引数据库进行离线存储。 DB有很多Object Store,每个Object Store都有索引。 IDB 索引由 name 和 keyPath(我们应用索引的 col) 属性组成。通常我们保持两个属性值相同(以便通过列名称轻松识别索引)。现在我的要求是对于索引仅更改KeyPath(索引名称保持不变)

在upgradeneeded回调(DBOpenRequest.onupgradeneeded)中,我可以从事务中获取对象存储。

DBOpenRequest.onupgradeneeded = function(event) {
var transaction = event.target.transaction;
var objectStore = transaction.objectStore("objectStore Name");
var IDBIndexObj = objectStore.index("indexName");//exception
if(IDBIndexObj.keyPath !== "newKeyPath"){
//delete index and create new index with the new keypath
}

};

但是对象存储只有索引的名称。当我尝试创建 IDBIndex 对象时,会抛出异常,因为事务是“versionchange”类型。那么,如何获取现有索引键路径与新键路径进行比较。

最佳答案

尝试如下操作:

function onUpgradeNeeded(event) {
var db = event.target.result;
var storeNames = db.objectStoreNames;
var myStore = null;

if(storeNames.contains('myStoreName')) {
myStore = event.target.transaction.objectStore('myStoreName');
} else {
myStore = db.createObjectStore('myStoreName', ...);
}

var indexNames = myStore.indexNames;
var desiredKeyPathForMyIndex = ...;

if(indexNames.contains('myIndexName')) {
var myIndex = myStore.index('myIndexName');
var currentKeyPath = myIndex.keyPath;
if(currentKeyPath != desiredKeyPathForMyIndex) {
myStore.deleteIndex('myIndexName');
myStore.createIndex('myIndexName', desiredKeyPathForMyIndex);
}
} else {
myStore.createIndex('myIndexName', desiredKeyPathForMyIndex);
}
}

查看https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex了解有关访问 IDBIndex 的其他属性的更多信息。

关于indexeddb - 在索引数据库升级时更新对象存储的现有索引键路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com