检查 indexedDB 索引是否已经存在

Check if indexedDB Index already exists

我想在 onupgradeneeded 中更新我的 indexeddb 数据库的一个对象库。我想检查一下,如果这个索引存在于这个 objecstore 中,那么就不需要做任何改变。但如果不是,我想更新它的索引。

    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', ...);
      }

    };