更新 indexeddb 中的单个字段

update a single field in indexeddb

以下工作代码用于设置我的问题:

myRequest = indexedDB.deleteDatabase('myDatabase')
myRequest.onsuccess = function() {
 var myRequest
 
 myRequest = indexedDB.open('myDatabase')
 myRequest.onupgradeneeded = function(response) {
  var myDatabase
   ,myObjectStore
  
  myDatabase = response.target.result
  myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true})
 }
 myRequest.onerror = function(response) {
  debugger
 }
 myRequest.onsuccess = function(response) {
  var myTransaction
   ,myObjectStore
   ,myRequest
   ,obj = {}
  window.myDatabase = response.target.result
  myTransaction = myDatabase.transaction(['myData'],'readwrite')
  myObjectStore = myTransaction.objectStore('myData')
  obj.field1 = 'a'
  obj.field2 = 'b'
  myObjectStore.add(obj)
 }
}

问:我怎么说相当于:

update myData set field2='c' where key=1

我是否必须在 .put 语句中同时提供 field1 和 field2?

是的,您必须放置完整的对象,例如

myObjectStore.get(1).onsuccess = function(e) {
  var obj = e.target.result;
  obj.field2 = 'c';
  myObjectStore.put(obj, 1);
};

myRequest = indexedDB.deleteDatabase('myDatabase')
myRequest.onsuccess = function() {
 var myRequest
 
 myRequest = indexedDB.open('myDatabase')
 myRequest.onupgradeneeded = function(response) {
  var myDatabase
   ,myObjectStore
  
  myDatabase = response.target.result
  myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true})
 }
 myRequest.onerror = function(response) {
  debugger
 }
 myRequest.onsuccess = function(response) {
  var myTransaction
   ,myObjectStore
   ,myRequest
   ,obj = {}
  window.myDatabase = response.target.result
  myTransaction = myDatabase.transaction(['myData'],'readwrite')
  myObjectStore = myTransaction.objectStore('myData')
  obj.field1 = 'a'
  obj.field2 = 'b'
  myObjectStore.add(obj)
 }
}

myRequest = indexedDB.deleteDatabase('myDatabase')
myRequest.onsuccess = function() {
 var myRequest
 
 myRequest = indexedDB.open('myDatabase')
 myRequest.onupgradeneeded = function(response) {
  var myDatabase
   ,myObjectStore
  
  myDatabase = response.target.result
  myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true})
 }
 myRequest.onerror = function(response) {
  debugger
 }
 myRequest.onsuccess = function(response) {
  var myTransaction
   ,myObjectStore
   ,myRequest
   ,obj = {}
  window.myDatabase = response.target.result
  myTransaction = myDatabase.transaction(['myData'],'readwrite')
  myObjectStore = myTransaction.objectStore('myData')
  obj.field1 = 'a'
  obj.field2 = 'b'
  myObjectStore.add(obj)
 }
}