作为Riggr SPA库的一部分,我一直在做这个项目,在这个项目中我想用和Mongo同样的交互方式使用IndexedDB。
Index提供的方法允许IndexedDB执行简单查询和操纵。他用UMD封装的格式编写,所以我建立Riggr代码库,以便可以合并其他开发者的修改,它可以用在AMD和non-AMD框架当中。 (注* AMD规范 )
创建一个数据存储
使用IndexedDB首先需要一个数据存储。创建数据存储可以通过下面的语句轻松的做到:
indexed('myDB').create();
上面的代码将创建数据存储。如果你在任何兼容的浏览器使用Chrome,或开放开发工具,您应该看到数据存储myDB放在‘resources’选项卡下的 IndexedDB目录下。
插入记录
insert()方法可以用来增加单个对象或对象数组。
indexed('myDB').insert({ name: 'John Doe' email: 'jdoe@email.com' }, function (err, data) { if (err) { console.log('Nope.'); } else { console.log(data); } });
上面的代码将会插入一条记录,(如果成功)返回新记录为0的索引数组。
记录自动获得一个_id属性作为他们的UID,所以输出是:
{
'_id': 928376488383,
'name': 'John Doe',
'email': 'jdoe@email.com'
}
要插入多条记录,只需提供一个数组:
indexed('myDB').insert([
{
name: 'John Doe',
email: 'jdoe@email.com'
}, {
name: 'Jane Smith',
email: 'jsmith@email.com'
}
], function (err, data) {
// Handle response...
});
上面的代码将插入这些记录,并返回一个记录数组。
查询记录
find()方法可以从数据存储返回全部或匹配的记录。
indexed('myDB').find(function (err, data) {
if (err) {
console.log('Nope.');
} else {
console.log(data);
}
});
上面的代码将会从数据存储中返回所有结果。
要查询特定记录,find()方法支持基于对象的查询:
indexed('myDB').find({
_id: 28972387982
}, function (err, data) {
if (err) {
console.log('Nope.');
} else {
console.log(data);
}
});
上述将返回与_id匹配的记录。
此外,比较查询可以通过$gt(大于),$lt(小于)$gte(大于或等于),$lte(小于或等于)、$like,和$ne(不平等)获得查询对象。例如:
indexed('myDB').find({
someNumber: { $gt : 25} },
function (err, data) {// Handle response...}
);
上面将返回所有属性someNumber大于25的记录。
更新记录
update()方法允许更新只匹配或整个数据存储的个人记录。它使用和find()方法相同的查询模式。例如:
indexed('myDB').update({
_id: 893897389789
}, {
name: 'New Name'
}, function (err, data) {
// Handle response...
});
上面将更新与_id匹配的记录,将这条记录的name属性设置为”New Name”。
通过省略第一个(查询)对象参数,可以更新数据存储中的所有记录。
删除记录
delete()方法允许删除匹配的个人记录,或整个数据存储。同样,这使用和find()相同的查询模式。例如:
indexed('myDB').delete(
{ _id: 838973897879},
function (err, data) {// Handle response...}
);
上面的代码将删除与_id匹配的记录。
通过省略第一个(查询)对象参数,数据存储中的所有记录将会被删除。
移除
drop()方法允许完全移除数据存储。
indexed('myDB').drop();
上面的代码将从IndexedDB存储删除数据存储。
总结
IndexedDB(如果你还没使用它)对于客户端/浏览器数据存储来说是一个很有用的解决方案。虽然对老版本浏览器的支持依然缺乏,使用IDB更新应用程序,甚至作为一个不支持老版本浏览器的特性,IndexedDB绝对是值得的。
IndexedDB仍然很新, 所以使用时要有应有的谨慎。他是在和他的父框架相同的MIT许可下发布的,所以你可以在任何你乐意使用的时候使用它,尽管我想在Riggr库中保留任何棘手的请求或问题,以便我可以更好地管理和应对它们。
Kent Safranski @fluidbyte
我开发原始的Web相关的事物,我是一个架构师领导开发TelePharm,这个项目中我与一个了不起的团队开发非常酷的应用程序。