javascript - 获取 Indexeddb 中未保存记录的数量

标签 javascript indexeddb

我在 Indexeddb 中保存了一些记录,我的数据库中的一个字段是“modifiedate”。我想计算修改日期不为空的所有记录。 我可以像这样计算数据库中的所有记录:

 var request = store.count();

我试过这样的:

  var myIndex = store.index('modifiedDate');
                    var cts = myIndex.count();

但这行不通。有什么想法吗?

最佳答案

获取索引的计数应该可行。确保您没有为从未修改过的对象设置 modifiedDate。如果 modifiedDate 属性未定义、为 null 或在对象的属性集中不存在,则索引将不包含该对象,导致仅具有已定义 modifiedDate 属性的对象包含在 modifiedDate 索引中,这会导致 count 返回属性(property)编号。

第二个问题是您如何使用计数函数。 IDBObjectStore.count 和 IDBIndex.count 返回一个 IDBRequest 对象,而不是一个数字。您必须异步获取计数。这可以使用回调函数轻松完成。

var countRequest = myIndex.count();
countRequest.onsuccess = function(event) {
  var theActualCountNumber = event.target.result;

  // Alternatives to above statement, use whatever you like
  // var theActualCountNumber = countRequest.result;
  // var theActualCountNumber = this.result;

  console.log('Number of objects with a modifiedDate property: ',
    theActualCountNumber);
};

您不能从回调函数返回“theActualCountNumber”变量值。它仅在函数内定义和访问。因此,无论什么代码想要在您获得计数值后使用它,都必须位于函数本身。使代码更清晰、更易于使用的简单技巧如下:

function countModified(db, callback) {
  var tx = db.transaction('mystore');
  var store = tx.objectStore('mystore');
  var index = store.index('modifiedDate');
  var request = index.count();
  request.onsuccess = function(event) {
    var count = event.target.result;
    callback(count);
  };
}

// An example of how to call it
var openRequest = indexedDB.open('mydb', myversion);
openRequest.onsuccess = function(event) {
  var db = event.target.result;
  countModified(db, onGetCountModified);
};

function onGetCountModified(count) {
  console.log('There are %s modified objects', count);
}

关于javascript - 获取 Indexeddb 中未保存记录的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906386/

相关文章:

javascript - 将对象与模块模式组合时我做错了什么

javascript - 为什么 document.execCommand ('paste' ) 在我的扩展中不起作用

Angular HttpInterceptor - 处理异步响应

javascript - Breezejs 支持 IndexedDB 吗?

javascript - IndexedDB - 检测是否建立索引

node.js - Dexie.js : get failures data records in bulkAdd() error catch

javascript - 将现有 Express Node 应用程序发布到静态站点的最简单方法?

javascript - 如何使用 event.addListener 和 Google Map API v3 获取触发的标记

javascript - 如何将图像和文章一起显示而不将它们硬编码为单独的页面?

electron - 使用 IndexedDB 打开两个 Web 应用程序 (Electron) 实例