IndexedDB: получить внешний ключ, связанный с конкретным объектом в хранилище объектов

Скажем, у меня есть хранилище объектов, которое было создано так:

IDBDatabase.createObjectStore(Name, {autoIncrement: true });

Теперь, скажем, я получаю объект из этого хранилища объектов, используя index посмотреть это.

Есть ли способ, которым я могу получить внешний ключ, связанный с объектом, чтобы я мог изменить / удалить его с IDBObjectstore.put() / IDBObjectstore.delete() или я застрял итерируя по хранилищу объектов с курсором (сравнение на основе некоторого произвольного свойства) и используя cursor.update() / cursor.delete()?

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

2 ответа

Решение

Когда данные вставляются в хранилище данных, возвращаемый объект события содержит информацию о ключе, используемом для вставки данных. Это можно получить с помощью event.target.result, Вы можете собрать информацию в это время.

Будь то встроенные ключи или внешние ключи, вы можете получить их одинаково.

var transaction = DB_HANDLER.transaction([tableName], "readwrite");
var objectStore = transaction.objectStore(tableName);
var request = objectStore.add(data);

request.onsuccess = function(event) {
    console.log("Key used for inserting data = " + event.target.result);
};

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

Другие вопросы по тегам