Javascript 如何将新值“放入”已存在indexedDB中已存在的objectStore中?

Javascript 如何将新值“放入”已存在indexedDB中已存在的objectStore中?,javascript,ecmascript-6,indexeddb,Javascript,Ecmascript 6,Indexeddb,我正绞尽脑汁试图更新indexedDB中objectStore中的一系列四个条目 这就是我想要实现的(在伪代码中): 但当然,这并不是那么简单 我知道我需要使用put。但是,尽管尝试了许多方法,但我无法取得更进一步的进展 当indexedDB首次创建时,我已经成功地设置并填充了objectStore: // SET UP VALUES OBJECT let valuesObject = { entry1 : 'a', entry2 : 'b', entry3 : 'c', e

我正绞尽脑汁试图更新
indexedDB
objectStore
中的一系列四个条目

这就是我想要实现的(在伪代码中):

但当然,这并不是那么简单

我知道我需要使用
put
。但是,尽管尝试了许多方法,但我无法取得更进一步的进展

indexedDB
首次创建时,我已经成功地设置并填充了
objectStore

// SET UP VALUES OBJECT

let valuesObject = {

  entry1 : 'a',
  entry2 : 'b',
  entry3 : 'c',
  entry4 : 'd'
};


// SET UP INDEXED DATABASE

const setUpIndexedDatabase = (valuesObject) => {

  let database
  const databaseVersion = 1; 
  const databaseName = \'myDatabase\';
  const databaseOpenRequest = indexedDB.open(databaseName, databaseVersion);

  databaseOpenRequest.onupgradeneeded = () => {

    database = databaseOpenRequest.result;

    let myObjectStore = database.createObjectStore('myObjectStore');

    myObjectStore.transaction.oncomplete = () => {

      let objectStoreValues = database.transaction('Values', 'readwrite').objectStore('Values');

      const valuesEntries = Object.entries(valuesObject);

      for (let i = 0; i < valuesEntries.length; i++) {

        objectStoreValues.add(valuesEntries[i][1], valuesEntries[i][0]);
      }
    }
  }


  databaseOpenRequest.onsuccess = () => {

    database = databaseOpenRequest.result;

    // >>> THIS IS THE BIT THAT I NEED TO WRITE <<<

    database.close();
  }
}

setUpIndexedDatabase(valuesObject);
//设置对象的值
设valuesObject={
条目1:‘a’,
条目2:‘b’,
条目3:‘c’,
第四题:“d”
};
//建立索引数据库
常量setupIndexedatabase=(valuesObject)=>{
让数据库
const databaseVersion=1;
const databaseName=\'myDatabase\';
const databaseOpenRequest=indexedDB.open(databaseName,databaseVersion);
databaseOpenRequest.onupgradeRequired=()=>{
database=databaseOpenRequest.result;
让myObjectStore=database.createObjectStore('myObjectStore');
myObjectStore.transaction.oncomplete=()=>{
让objectStoreValues=database.transaction('Values','readwrite')。objectStore('Values');
const valuesEntries=Object.entries(valuesObject);
for(设i=0;i{
database=databaseOpenRequest.result;

//>>>这是我需要写的位如果您想更新数据库中已经存在的值,可以使用以下代码(例如,我正在更新
entry1
条目):


myObjectStore.transaction.oncomplete
中的代码正在工作。这是
databaseOpenRequest.onsuccess
中的代码,而不是。@Rounin,你能更好地解释一下你想要实现什么吗?创建数据库时,你正在插入(在
onupgradeneeded
回调中)数据库中有四个条目。第一个条目有键“a”和值“entry1”,第二个条目有键“b”和值“entry2”,依此类推。您想在
success
回调中更新什么?我想稍后访问同一个数据库并更新四个键中每个键的相应值。因此,现在我想
entry1
有一个值对于
e
entry2
的值为
f
等。我已经通过检查objectStore是否存在、删除objectStore、更改数据库版本以及使用新版本创建新数据库成功地实现了这一点。但我几乎可以肯定,我不必创建新数据库e只需更改当前数据库中包含的某些值。但是
valuesObject
中的值没有更改,您从哪里获得新值?有一个新的
valuesObject
。太棒了,非常感谢您使用正确语法@mgarcia提供的帮助。
// SET UP VALUES OBJECT

let valuesObject = {

  entry1 : 'a',
  entry2 : 'b',
  entry3 : 'c',
  entry4 : 'd'
};


// SET UP INDEXED DATABASE

const setUpIndexedDatabase = (valuesObject) => {

  let database
  const databaseVersion = 1; 
  const databaseName = \'myDatabase\';
  const databaseOpenRequest = indexedDB.open(databaseName, databaseVersion);

  databaseOpenRequest.onupgradeneeded = () => {

    database = databaseOpenRequest.result;

    let myObjectStore = database.createObjectStore('myObjectStore');

    myObjectStore.transaction.oncomplete = () => {

      let objectStoreValues = database.transaction('Values', 'readwrite').objectStore('Values');

      const valuesEntries = Object.entries(valuesObject);

      for (let i = 0; i < valuesEntries.length; i++) {

        objectStoreValues.add(valuesEntries[i][1], valuesEntries[i][0]);
      }
    }
  }


  databaseOpenRequest.onsuccess = () => {

    database = databaseOpenRequest.result;

    // >>> THIS IS THE BIT THAT I NEED TO WRITE <<<

    database.close();
  }
}

setUpIndexedDatabase(valuesObject);
databaseOpenRequest.onsuccess = function(event) {
    db = event.target.result;

    const objectStore = db.transaction('myObjectStore', 'readwrite').objectStore('myObjectStore');
    const request = objectStore.put('e', 'entry1');
    request.onerror = function(event) {
        // There was an error while updating.
    };
    request.onsuccess = function(event) {
        // The update was successful.
    };
}