MorningSpace Lab
深入浅出LoopBack
第四幕
缤纷多彩的数据源
—— 打开LoopBack的数据之窗
Speaker: 杨艺峰
April, 2018
我是谁?
杨艺峰,IBM软件开发工程师,现任职于IBM社交应用产品IBM Connections开发部门。目前,从事SmartCloud运维和docsnext的开发工作。
## 我们将了解到什么?
* 如何对数据进行操作?
* 什么是数据源和连接器?
* 如何有效利用数据源?
## LoopBack标准数据处理方式
* 所有绑定数据源的LoopBack Model都自动具备继承自PersistedModel的标准数据访问接口
|操作 |REST API |Model API |对应的SQL操作
| ---- |:---- |:---- |:----
|Create |POST/PUT |create()等 |INSERT
|Read |GET |find()等 |SELECT
|Update |POST/PUT |updateAll()等 |UPDATE
|Delete |DELETE |destroyById()等 |DELETE
## 数据的增删改
* 新增:
* create()
* upsert(), findOrCreate()
* save()
* 修改:
* updateAll()
* updateAttribute(), updateAttributes()
* createUpdates(), bulkUpdate()
* 删除:
* destroyAll()
* destroyById()
## 数据的查询
|Model API |REST API
| ---- |:----
|find(filter, cb) |GET /model?filter...
|findOne(filter, cb) |GET /model/findOne?filter...
|findById(id, [filter,] cb) |GET /model/id
// 一个Model API的例子
SharableTask.find({
where: {sharedWith: 'moying'}, limit: 3
},
function(err, accounts) { /* ... */ });
## 使用过滤器进行数据查询
|过滤器 |数据类型 |描述
| ---- |:---- |:----
|fields |对象,数组,或字符串 |指定返回结果中包含或不包含的字段
|include |对象,数组,或字符串 |包含来自关联模型的结果
|limit |数值 |限定返回实例的数量
|order |字符串 |指定排序规则
|skip(offset) |数值 |跳过指定数量的实例
|where |对象 |指定搜索条件,类似SQL中的WHERE字句
## 使用过滤器进行数据查询
* 过滤数组对象:利用实现了LoopBack过滤器语法的*loopback-filters*
* 过滤嵌套属性:LoopBack在某些数据库上支持对嵌套属性的过滤,如:mongodb,memory,cloudant
## ☑︎ 任务清单
* 利用*GET /tasks*的filter参数尝试各种过滤器的使用
* 修改Task.getList(),增加各种过滤条件
关于数据源和连接器
- 数据源代表后端系统,如:数据库,外部REST服务等
- 连接器通过数据库驱动或其他外部API实现数据交换
- LoopBack支持各种数据源,包括:NoSQL数据库,关系数据库,其他非数据库类型的数据源,以及自定义数据源
## ☑︎ 任务清单
* 为TaskMe增加一个mongodb的数据源
## 某些典型使用场景
* 根据Model创建数据库的schema
* auto-migrate
* auto-update
* 通过connector直接操作数据库
* 根据实际需求选择不同类型的connector,如:
* REST connector用于远程REST API调用
* Elasticsearch connector用于对Elasticsearch进行访问
* ...
## 各种丰富的connector支持
* 数据库: memory, Cassandra, Cloudant, DashDB, DB2, Informix, MongoDB, MySQL, Oracle, PostgreSQL, Redis, SQL Server, SQLite3
* 非数据库: Email, JSON RPC, MQ Light, Push, REST, SOAP, Storage
* 社区贡献: CouchDB, Kafka, ArangoDB, Couchbase, Elasticsearch, Fabric Composer, Firebase Firestore, Mandrill, Neo4j, RavenDB, RethinkDB, Riak, SAP HANA, SQLite, Twilio
## ☑︎ 任务清单
* 在boot script里,利用auto-update为mongodb增加新的index
* 通过直接操作connector,为Task增加针对title属性的全文搜索功能