我在 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/