对于二次开发的 STF 平台的开发者来说,rethinkdb 就是个坑,网上资料都没有,写个查询语句都很费劲,有多少人狠不得把 rethinkdb 换成 mysql!!!
个人建议是:不要换 rethinkdb,学会使用 rethinkdb 后就不会想换成 mysql 了。
其实我也是一个从想把 rethinkdb 换成 mysql 的到坚持使用 rethinkdb 的人,因为 rethinkdb 确实好用。
比如:你想在数据表中增加一列数据,如果是 mysql 就行去创建一列,而在对象型数据 rethinkdb 中就可以直接插入,代码如下
var newdata = {
Asset-Num: 101,
beyond : Supperman,
....
};
r.db('stf').table('devices').get('serial').update({
detail:r.row('detail').default([]).append(newdata)})
在此你可以不用理会 newdata 里面的内容有多少,你只需要保证格式正确就可以往里面无限的插数据。
STF 平台的搭建和 Rethinkdb 的安装就不写了。直接进入主题吧。
打开 rethinkdb 的 DataExplorer, http://192.168.xx.xx:8080
先看一下 SQL 与 RQL 对应:
以 STF 中的 “devices” 表为例子,我们要查询所有的 devices,平时我们用 SQL 语句是
select * from devices
但在 RQL 使用的就是:
r.db('stf').table('devices')
所查询出来的结果是以一个 json 保存下来的数据表,你可以用 treeview 的形式查看,当然你也可以选择以列表的查看,如下图所示:
看一下所有查询出来的结果,是否感觉太多?内嵌好多层,如果想查看某个字段的数据呢?
比如,其中 battery 里面还有数据,你只想查看到 bettery 的数据,可以直接在查询语句后面加上 ('index') 进行查询,如
r.db('stf').table('devices')('battery')
此时就只会把 battery 的信息显示出来。
查询语句的 API 里面还有 get/getAll/filter 等
Example:
//get
r.db('stf').table('devices').get('F8UDU15131003748')
//getAll 由于我不知道devices的列表的二级索引,所以只能拿官方的例子
r.table('marvel').getAll('man_of_steel', {index:'code_name'}).run(conn, callback)
//filter,相当于select * from devices where manufacturer in ["HUAWEI","SAMSUNG","dfdfd"]
r.db('stf').table("devices").filter(
function (doc) {
return r.expr(["HUAWEI","SAMSUNG","dfdfd"])
.contains(doc("manufacturer"));
}
)
//getField
r.db('stf').table('devices').getField('manufacturer')
//withField
r.db('stf').table('devices').withFields('serial','manufacturer','version','display')
输出来的结果大家可以去试一下,我就不在这里一一贴出来了。其实还有很多查询方法没列出来,由于早晨的空闲时间太短了,又得干活了,只能写这么多,后续有时时间再把增删改等做个分享。