indexeddb(IDB)索引不适用于年份字段

时间:2018-08-26 10:01:48

标签: local-storage indexeddb progressive-web-apps local-database

我是indexedDB(IDB)的新手,并尝试使用jakearchibald的IndexedDB Promised API 处理CRUD。我也可以创建数据库,objectStore和索引

创建数据库

devDependencies

我已经创建了表格和索引标题和年份。

创建表/对象存储和索引

createEmptyDB: function () {
    return new Promise( function (resolve) {
      idb.open( IDB.dbName, 1, function (idbCx) {
      }).then( resolve)
      .catch( function (err) {
      reject( err);
    });
    });
  }

我已经创建了游标以获取与书名名称匹配的数据作为“ Book6”

光标迭代表中的值

createTableAndIndex: function (tableName) {
    return new Promise( function (resolve) {
      idb.open( IDB.dbName, 2, function (idbCx) {
        if (!idbCx.objectStoreNames.contains(tableName)) {
          bookssOS = idbCx.createObjectStore(tableName, {keyPath:"id",autoIncrement:true,});
          bookssOS.createIndex('title', 'title', {unique: false});
          bookssOS.createIndex('year', 'year', {unique: false});
        }

      }).then( resolve);
    });
  }

但是,当我尝试通过注释索引标题并启用年份索引来匹配“ 2000”年以获取图书时,由于以下记录,它没有获取2000年添加的图书。请帮助我找到问题,并先感谢。

fetchUsingCursor: function ( tableName) {
  return new Promise( function (resolve, reject) {
    idb.open( IDB.dbName).then( function (idbCx) {  // idbCx is a DB connection
      var tx = idbCx.transaction('books', 'readonly');
      var store = tx.objectStore('books');

      var storeIndex = store.index('title');
      var range = IDBKeyRange.only("Book6");

     // var storeIndex = store.index('year');
     // var range = IDBKeyRange.only(2000);

      return storeIndex.openCursor(range);
    }).then(function bookItems(cursor) {
      if (!cursor) {
        return;
      }

      for (var field in cursor.value) {
        console.log(cursor.value['title']);
      }
      return cursor.continue().then(bookItems);
    })
    .catch( function (err) {
      reject( err);
    });
  });
}

0 个答案:

没有答案