索引:像Mongo一样查询IndexedDB


发布者 1518409521  发布时间 1400458278563
关键字 行业动态  开源 

作为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,这个项目中我与一个了不起的团队开发非常酷的应用程序。