检查indexedDB索引是否已存在

use*_*296 1 indexeddb

我想在onupgradeneeded中更新我的indexeddb数据库的一个objecstores.我想检查一下,如果此objecstore中存在此索引,则无法进行任何更改.但如果不是我想更新它的索引.

Jos*_*osh 6

var request = indexedDB.open(...);
request.onupgradeneeded = function(event) {
  // Get the IDBDatabase connection
  var db = event.target.result;

  // This is the implied IDBTransaction instance available when
  // upgrading, it is type versionchange, and is similar to
  // readwrite.
  var tx = event.target.transaction;

  // Get the store from the transaction. This assumes of course that 
  // you know the store exists, otherwise use 
  // db.objectStoreNames.contains to check first.
  var store = tx.objectStore('myStore');

  // Now check if the index exists
  if(store.indexNames.contains('myIndex')) {
    // The store contains an index with that name
    console.log('The index myIndex exists on store myStore');

    // You can also access the index and ensure it has the right 
    // properties you want. If you want to change the properties you 
    // will need to delete the index then recreate it.
    var index = store.index('myIndex');

    // For example
    if(index.multiEntry) {
      console.log('myIndex is flagged as a multi-entry index');
    }

    if(index.unique) {
      console.log('myIndex is flagged with the unique constraint');
    }

  } else {
    // The store does not contain an index with that name
    console.log('The index myIndex does not exist on store myStore');

    // Can create it here if you want
    store.createIndex('myIndex', ...);
  }

};
Run Code Online (Sandbox Code Playgroud)

  • https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/indexNames 和 https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList (2认同)