2017-11-17 4 views
0

Ich muss Strings in IndexedDb setzen, die distinct sind. Ich kann sie als Schlüssel ohne Wert haben (ziemlich neu bei indexedDb, also weiß nicht, ob das möglich ist). Das Problem ist, dass jedes Mal, wenn diese Zeichenfolgen gelesen werden, sie wiederholt in IndexDb eingefügt werden. Ich möchte keine andere Methode schreiben, die überprüft, ob diese Werte bereits vorhanden sind, um die Wiederverwendbarkeit von Methoden beizubehalten. Ich glaube, es sollte eine Möglichkeit geben, upgradeDb.createObjectStore('categories', { autoIncrement: true }); zu schreiben, um dies zu tun, kann einfach nicht finden, wie. Mein Code:Wie haben Sie nur den Schlüssel ohne Wert oder wie Sie verschiedene Werte oder in IndexedDb setzen?

Erstellen der Datenbank mit der Tabelle:

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

Schreiben zur Datenbank:

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

Vielen Dank im Voraus.

Antwort

1

Da Sie die Zeichenfolgen als Schlüssel verwenden möchten, autoIncrement ist nicht was Sie wollen - es erzeugt Schlüssel für Sie.

entfernen autoIncrement Option, wenn das Objektspeicher definiert, und einfach mit expliziten Schlüsseln und einem Dummy-Wert setzen (z.B. true):

var DUMMY_VALUE = true; 

arrayToPut.map(arrayItem => { 
    store.put(/*value=*/DUMMY_VALUE, /*key=*/arrayItem); 
}); 
Verwandte Themen