2017-11-17 8 views
0

という別個のという文字列をIndexedDbに入れる必要があります。私は価値のないキーとしてそれらを持つことができます(かなり新しいindexedDbなので、それが可能かどうかわかりません)。今の問題は、これらの文字列が読み込まれるたびにIndexDbに繰り返し挿入されることです。メソッドの再利用性を維持するために、これらの値がすでに存在するかどうかをチェックする別のメソッドを記述したくない。私はこれを行うにはupgradeDb.createObjectStore('categories', { autoIncrement: true });を書き直す方法があるはずだと信じて、ちょうど方法を見つけることができません。私のコード:値を持たないキーを持つ方法、または異なる値を設定する方法、またはIndexedDbに入れる方法は?

テーブルとデータベースの作成:

function idbOpen() { 
    return idb.open('greedy', 1, upgradeDb => { 
     upgradeDb.createObjectStore('categories', { autoIncrement: true }); 
    }); 
} 

データベースへの書き込み:事前に

putArrayToDb = (tableName, arrayToPut) => { 
    if (this.dbPromise) { 
     this.dbPromise.then(db => { 
      if (!db) return; 

      var tx = db.transaction(tableName, 'readwrite'); 
      var store = tx.objectStore(tableName); 
      arrayToPut.map(arrayItem => { 
       store.put(arrayItem); 
      }); 
     }) 
    } 
} 

putArrayToDb('categories', ["value1", "value2", "value3"]); 

database gets filled with values every refresh

感謝。

答えて

1

文字列をキーとして使用したいので、autoIncrementはあなたのためにキーを生成しません。

は、オブジェクトストアを定義する場合autoIncrementオプションを削除し、単に明示的なキーとダミー値(例えばtrue)と置く:

var DUMMY_VALUE = true; 

arrayToPut.map(arrayItem => { 
    store.put(/*value=*/DUMMY_VALUE, /*key=*/arrayItem); 
}); 
関連する問題