Indexeddb - 按索引键更新记录

时间:2013-05-10 08:40:07

标签: indexeddb

我有一个带有密钥路径“id”(自动增量)的对象存储,以及该服务器上从服务器生成的具有密钥路径“myId”的唯一索引。 当我需要更新记录时,我没有“id”可用,那么考虑到索引是唯一的,如何使用“myId”来更新记录?

我已经尝试过使用mystore.put(record),但由于已经存在“myId”的记录,因此会出错。

1 个答案:

答案 0 :(得分:3)

由于您已在myId属性上获得了唯一键索引,因此您可以根据该值检索记录。您需要使用only IDBKeyRangecursor查询,如下所示:

var transaction = db.transaction('myStore');
var store = transaction.objectStore('myStore');
var index = store.index('myId_Index');
var keyRange = IDBKeyRange.only(obj.myId);

var request = index.openCursor(keyRange);

request.onsucess = function (e) {
    var cursor = e.target.result;

    if (cursor) {
        var item = cursor.value;
        obj.id = item.id;
        //save the object
    }
};

此外,如果您想使用相同的交易进行更新,则需要将其设为readwrite,而不是readonly