获取 Indexeddb 中未保存记录的数量
Getting count of unsaved records in Indexeddb
我在 Indexeddb 中保存了一些记录,我的数据库中的字段之一是 "modifieddate"。我想计算修改日期不为空的所有记录。
我可以像这样计算数据库中的所有记录:
var request = store.count();
我试过这样的事情:
var myIndex = store.index('modifiedDate');
var cts = myIndex.count();
但这不起作用。有什么想法吗?
获取索引计数应该可行。确保您没有为从未修改过的对象设置 modifiedDate。如果 modifiedDate 属性 未定义、为空或在对象的属性集中不存在,则索引将不包含该对象,导致只有具有已定义 modifiedDate 属性 的对象被包含在modifiedDate 索引,这导致计数 returning 属性 数字。
第二个问题是您如何使用计数函数。 IDBObjectStore.count 和 IDBIndex.count return 一个 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);
};
您不能 return '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);
}
我在 Indexeddb 中保存了一些记录,我的数据库中的字段之一是 "modifieddate"。我想计算修改日期不为空的所有记录。 我可以像这样计算数据库中的所有记录:
var request = store.count();
我试过这样的事情:
var myIndex = store.index('modifiedDate');
var cts = myIndex.count();
但这不起作用。有什么想法吗?
获取索引计数应该可行。确保您没有为从未修改过的对象设置 modifiedDate。如果 modifiedDate 属性 未定义、为空或在对象的属性集中不存在,则索引将不包含该对象,导致只有具有已定义 modifiedDate 属性 的对象被包含在modifiedDate 索引,这导致计数 returning 属性 数字。
第二个问题是您如何使用计数函数。 IDBObjectStore.count 和 IDBIndex.count return 一个 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);
};
您不能 return '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);
}