javascript - 如何在不创建新条目的情况下更新 indexedDB 中的条目

标签 javascript indexeddb

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

成功处理程序

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

.onupgradeneeded 的代码

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”

最佳答案

IDBObjectStore 接口(interface)的 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

关于javascript - 如何在不创建新条目的情况下更新 indexedDB 中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543234/

相关文章:

javascript - 在 Firefox 中检查 IndexedDB 的真实可用性

javascript - 如何加载整个 AngularJs 应用程序使用的数据?

javascript - indexedDB 可重用函数

javascript - IndexedDB - 数据错误 : Data provided to an operation does not meet requirements

javascript - 使用 Angular 连接到外部 API

javascript - 在 div/class 数组中查找特定键

javascript - Jquery UI 从 slider 获取值

javascript - 客户端敏感数据加密

javascript - Angular.js 中 <div> 的按键控制位置

javascript - maxLength 属性不会阻止字符进入 ExtJS MessageBox.prompt()