Saya perlu memasukkan string ke dalam IndexedDb yang berbeda. Saya dapat memilikinya sebagai kunci tanpa nilai (cukup baru di indexedDb jadi bahkan tidak tahu apakah itu mungkin). Masalahnya sekarang adalah setiap kali string ini dibaca, string tersebut dimasukkan ke dalam IndexDb berulang kali. Tidak ingin menulis metode lain yang akan memeriksa apakah nilai-nilai ini sudah ada, untuk mempertahankan penggunaan kembali metode. Saya percaya harus ada cara untuk menulis ulang upgradeDb.createObjectStore('categories', { autoIncrement: true }); untuk melakukan ini, hanya tidak dapat menemukan caranya. Kode saya:

Membuat database dengan tabel:

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

Menulis ke database:

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

Terima kasih sebelumnya.

0
MadRussian 17 November 2017, 08:00

1 menjawab

Jawaban Terbaik

Karena Anda ingin menggunakan string sebagai kunci, autoIncrement bukan yang Anda inginkan - ini menghasilkan kunci untuk Anda.

Hapus opsi autoIncrement saat mendefinisikan penyimpanan objek, dan cukup masukkan dengan kunci eksplisit dan nilai dummy (mis. true):

var DUMMY_VALUE = true;

arrayToPut.map(arrayItem => {
    store.put(/*value=*/DUMMY_VALUE, /*key=*/arrayItem);
});
1
Joshua Bell 17 November 2017, 18:41