将索引添加到 IndexedDB 中的现有对象存储
Adding an index to an existing object store in IndexedDB
如何在需要升级的事件中为之前创建的对象存储添加索引?
在新的对象存储上执行此操作有据可查:
request.onupgradeneeded = function(event) {
var db = event.target.result;
var objectStore = db.createObjectStore("my-store",
{ keyPath: "id" }
);
objectStore.createIndex("idx_name", "index_this", { unique: false });
};
但是如何向我之前创建的对象存储添加索引?
request.onupgradeneeded = function(event) {
var db = event.target.result;
if (!db.objectStoreNames.contains("my-store")) {
var objectStore = db.createObjectStore("my-store",
{ keyPath: "id" }
);
}
var myStore = ?????????????;
if (!myStore.indexNames.contains("idx_name")) {
myStore.createIndex("idx_name", "index_this", { unique: false });
}
};
您想从 onupgradeneeded 函数范围内隐式提供给您的事务中检索对对象存储的引用。
function onupgradeneeded(event) {
var request = event.target;
var tx = request.transaction;
var store = tx.objectStore('store-name');
store.createIndex(...);
}
请记住,您将必须重写 onupgradeneeded 函数,以便您仅在存储已创建时才尝试获取它,并且您仅在尚未创建索引时才尝试创建索引。有几种方法可以做到这一点。一种是使用版本号。您可以针对升级前存在的旧版本或 new/current 版本进行测试。例如。如果需要,请使用 event.oldVersion
。或者,您可以测试商店是否存在并单独测试索引是否存在,方法是使用 db.objectStoreNames.contains
查找商店名称,并在 store.indexNames.contains
.
中查找索引名称
如何在需要升级的事件中为之前创建的对象存储添加索引?
在新的对象存储上执行此操作有据可查:
request.onupgradeneeded = function(event) {
var db = event.target.result;
var objectStore = db.createObjectStore("my-store",
{ keyPath: "id" }
);
objectStore.createIndex("idx_name", "index_this", { unique: false });
};
但是如何向我之前创建的对象存储添加索引?
request.onupgradeneeded = function(event) {
var db = event.target.result;
if (!db.objectStoreNames.contains("my-store")) {
var objectStore = db.createObjectStore("my-store",
{ keyPath: "id" }
);
}
var myStore = ?????????????;
if (!myStore.indexNames.contains("idx_name")) {
myStore.createIndex("idx_name", "index_this", { unique: false });
}
};
您想从 onupgradeneeded 函数范围内隐式提供给您的事务中检索对对象存储的引用。
function onupgradeneeded(event) {
var request = event.target;
var tx = request.transaction;
var store = tx.objectStore('store-name');
store.createIndex(...);
}
请记住,您将必须重写 onupgradeneeded 函数,以便您仅在存储已创建时才尝试获取它,并且您仅在尚未创建索引时才尝试创建索引。有几种方法可以做到这一点。一种是使用版本号。您可以针对升级前存在的旧版本或 new/current 版本进行测试。例如。如果需要,请使用 event.oldVersion
。或者,您可以测试商店是否存在并单独测试索引是否存在,方法是使用 db.objectStoreNames.contains
查找商店名称,并在 store.indexNames.contains
.