Когато използвам IndexedDB, как мога да изтрия множество записи с помощта на индекс, който не е ключът?

Имам код за създаване на indexedDB тук:

function create_db() {
    var indexedDB = window.indexedDB || window.webkitIndexedDB || window.msIndexedDB;
    var request = indexedDB.open(“photos”, 2);

    request.onupgradeneeded = function(event) {
        var db = event.target.result;

        // Create photo db
        var photo_store = db.createObjectStore("photos", {keyPath: "photo_id"});
        var photo_id_index = photo_store.createIndex("by_photo_id",        "photo_id", {unique: true});
        var dest_id_index  = photo_store.createIndex("by_destination_id",  "destination_id");

        console.log(“store created”);
    };

    request.onsuccess = function(event) {
        console.log(“store opened”);
    };

    request.onerror = function(event) {
        console.log("error: " + event);
    };

}

Моят код за премахване на записи:

 function remove_photos = function (destination_id, db) {
var transaction = db.transaction("photos", "readwrite");
var store       = transaction.objectStore("photos");
var index       = store.index("by_destination_id");
var request     = index.openCursor(IDBKeyRange.only(destination_id));

request.onsuccess = function() {
    var cursor = request.result;

    if (cursor) {
        cursor.delete();
        cursor.continue();
    }
};

}

Как мога да изтрия записи с помощта на индекса by_destination_id, така че да мога да изтрия всички записи с даден destination_id, който е цяло число?

Благодаря за всяка помощ.


person alecdhuse    schedule 20.02.2015    source източник


Отговори (1)


Намерих решението на моя проблем, функцията IDBKeyRange.only не харесва цели числа, тя трябва да бъде низ, така че замествайки този ред в:

var request = index.openCursor(IDBKeyRange.only(destination_id.toString()));

Накарайте кода да работи.

person alecdhuse    schedule 20.02.2015
comment
алек, приеми отговора си, ако отговаря напълно на въпроса ти - person Deni Spasovski; 21.02.2015
comment
@DeniSpasovski, ще направя веднага щом SO ми позволи. - person alecdhuse; 21.02.2015
comment
Имате повече от 15 репутация, така че можете да го направите сега! - person Deni Spasovski; 21.02.2015
comment
@DeniSpasovski Все още пише, че трябва да чакам един час, така че ще го приема веднага щом мога. - person alecdhuse; 22.02.2015