2017-11-17 6 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); 
}); 
관련 문제