如何在indexedDB中更新条目而不创建新条目

时间:2019-06-11 12:00:21

标签: javascript indexeddb

我正在创建一个基本的联系人应用程序,以了解IndexedDB及其使用方法。我已经阅读了Mozilla开发人员指南,其中提到了更新条目,但它似乎对我不起作用。任何帮助将不胜感激。谢谢

成功处理者

let dbObject = window.indexedDB.open( 'contacts' );

需要.onupgrade的代码

let peopleOS = db.createObjectStore( 'people', { keyPath: "name", autoIncrement: false } );

dbObject.onsuccess = e => {

    // Retreive database
    let db = event.target.result;

    /*
    * ---------------------------
    * Add one person to database
    * ---------------------------
    * 
    * Create Transaction
    * Select Object Store
    * Add Person
    */

    let trxn = db.transaction( ['people'], 'readwrite' );
    let store = trxn.objectStore( 'people' );

    store.add( { name: "Jedidiah", age: 20 } );
    store.add( { name: "Mario", age: 127 }  );

    trxn.oncomplete = () => {

        let trxn = db.transaction( ['people'], 'readwrite' );
        let store = trxn.objectStore( 'people' );

        // Update
        let request = store.get("Jedidiah");
        request.onsuccess = (event) => {

            let data = event.target.result;

            // Update name to "Ieti"
            data.name = "Ieti";

            let result = store.put( data );
            result.onsuccess = () => {
                alert("Value updated");
            };

        };

    };

};

我希望将名称为“ Jedidiah”的条目更改为“ Ieti”,但它将在数据库中创建一个与“ Jedidiah”相同的值但名称和keyPath为“ Ieti”的新条目

1 个答案:

答案 0 :(得分:1)

IDBObjectStore接口的put()方法更新数据库中的给定记录,或者如果给定项不存在则插入新记录。但是,如果要像您的情况那样更新存储数据的某些属性,则应使用update api。

以下是put api的文档-https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/put

以下是更新API的文档-https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update