IDBKeyRange.only()仅返回第一个匹配的记录

时间:2016-11-12 22:19:03

标签: javascript indexeddb

我正在查询我的数据库表,如下所示:

function getAllRecords(letter)
{
     var trans = db.transaction(["ObservableStates"],"readonly").objectStore("ObservableStates").index('letterIndex');
     //get all matching records
     var request = trans.openCursor(IDBKeyRange.only([letter]));

     request.onsuccess = function(event)
     {
          var cursor = event.target.result;
          if(cursor)
          {
              count+=1;
              cursor.continue();
              console.log(cursor);
          }

      }

      request.onerror = function(event)
      {
          console.log('ERROR LOADING DATA FROM TABLE');
      }
      //delete all of the returned records

}

我有两条记录,其值为letter,但只返回第一条记录。 cursor.continue()似乎在这种情况下不起作用。

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

这应该有效,我无法重现这个问题。您可能会遇到浏览器错误(您正在测试哪个浏览器?)或者您的代码中的错误假设是我未在此处捕获的。

这就是我正在做的事情:

var openRequest = indexedDB.open('test');
openRequest.onupgradeneeded = function() {
  var db = openRequest.result;
  var store = db.createObjectStore('ObservableStates');
  store.createIndex('letterIndex', 'p'); 
  store.put({p: ['a']}, 1);
  store.put({p: ['a']}, 2);
};
openRequest.onsuccess = function() {
  var db = openRequest.result;
  var trans = db.transaction('ObservableStates', 'readonly');
  var index = trans.objectStore('ObservableStates').index('letterIndex');
  var request = index.openCursor(IDBKeyRange.only(['a']));
  request.onsuccess = function() {
    var cursor = request.result;
    if (cursor) {
      console.log(cursor.key, cursor.primaryKey);
      cursor.continue();
    }
  }
};

我看到记录了:

  
      
  • [" a"] 1
  •   
  • [" a"] 2
  •   

您可能还希望针对您的索引执行count([letter])请求,以确认它的记录数量与您预期的数量相同。