对于二次开发的 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 等

  1. get:使用 primerykey 进行查询,获取到其数据
  2. getAll:需要使用第二级索引来进行查询
  3. filter:字面意思就是过滤,相当于 sql 中的 where
  4. getField:获取其中一列的内容
  5. withField:获取多个列的内容

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')

输出来的结果大家可以去试一下,我就不在这里一一贴出来了。其实还有很多查询方法没列出来,由于早晨的空闲时间太短了,又得干活了,只能写这么多,后续有时时间再把增删改等做个分享。


↙↙↙阅读原文可查看相关链接,并与作者交流