как сохранить массив коллекций mongodb внутри IndexedDB

#javascript #jquery #mongodb #cordova #indexeddb

#javascript #jquery #mongodb #кордова #indexeddb

Вопрос:

Здравствуйте, я хочу создать локальную базу данных для моего phonegap, чтобы пользователь мог использовать ее в автономном режиме.

У меня есть это в угловой функции, которая создает базу данных.

    function Database() {

    return {
        create: function (itemDocs) {

            var db = null;

            var request = indexedDB.open("myDB", 1);

            request.onsuccess = function (event) {
                db = event.target.result;
                console.log("DB loaded successfully");

            };

            request.onerror = function (event) {
                console.log(event)
            };

            request.onupgradeneeded = function (event) {
                db = event.target.result;
                console.log("DB initiliazed / created");

                //create collections
                db.createObjectStore("items", {keyPath: "_id"});

                //create documents
                var transaction = db.transaction(["items"], "readwrite");

                var items = transaction.objectStore("items");

                items.add(itemDocs);

            };


        }
    }

}
  

itemDocs содержит коллекцию MongoDB (которая представляет собой массив объектов), и я хочу сохранить эту коллекцию внутри базы данных IndexedDB проблема, с которой я сталкиваюсь, заключается в том, что я получаю эту досадную ошибку.

 Uncaught InvalidStateError: Failed to execute 'transaction' on 'IDBDatabase': A version change transaction is running.
  

Ответ №1:

Используйте var transaction = event.target.transaction вместо var transaction = db.transaction(...);

Полный ответ довольно длинный. Вкратце, вы не хотите создавать новую транзакцию в onupgradeneeded. Для вас уже доступна активная транзакция.