Как при использовании 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, чтобы я мог удалить все записи с заданным target_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