STF STF 之数据操作--基本够用的 Rethindb 语法

0x88 · 2016年12月12日 · 最后由 blueshark 回复于 2016年12月13日 · 1448 次阅读

以下例子基本应该够用了,万一自己忘记了还有备份。😅

插入数据

.db('stf').table('apkinfo').insert({
  id: "1",
  name:  "中国象棋",
  apkname: "boyaa",
  version: "2.1.0",
  size: "30M",
  uploadday: "2016-11-26",
  activity: "1"
})

在数据表对象中插入一行数据

var newdata = {
"product":  "oppo" ,
"result":  "pass"
};
r.db('stf').table('tasklist').get('d179c4b3-62ec-4139-92f5-6bb677094bb6').update({
detail:r.row('detail').default([]).append(newdata)})
//get('keyid')

在数据表中过滤数据:

r.db('stf').table('devices').filter({display:{xdpi:320,ydpi:320}})

替换数据

var rpldata={
  reporturl:"stf.oa.com/log/xx.log"
};
r.db('stf').table('tasklist').get('taskid').update(rpldata)

插入数据 2

var newdata={
  taskid: "20161129"
  ,useremail: "ff@qq.com"
  ,apkname:"chinesechessv2.5.0.apk"
  ,reporturl:""
  ,detail:[]
};
r.db('stf').table('tasklist').insert(newdata)

增加 detail[] 数据:

var rpldata={
  product:"huawei 6p"
  ,serial:"abcdefghijklmn"
  ,status:"finish"
  ,result:"install fail"
  ,errurl:"stf.oa.com/logurl/serail.log"
  ,imgurl:"stf.oa.com/imgurl/serail.log"
};
r.db('stf').table('tasklist').get('20161129').update({detail:r.row("detail").append(rpldata)})

删除

r.db('stf').table('tasklist').get('20161129').update({detail:r.row("detail").delete(第几条)})

替换 detail[] 里面的数据

var data={
  product:"huawei 6p"
  ,serial:"abcdefghijklmn"
  ,status:"finish"
  ,result:"success"
  ,errurl:"stf.oa.com/logurl/serail.log"
  ,imgurl:"stf.oa.com/imgurl/serail.log"
};
r.db('stf').table('tasklist').get('20161129').update({detail:r.row("detail").changeAt(第几条数据,data)})

数据查询
查询 huawei 和 sumsang 的手机并获取其 serial

r.db('stf').table("devices").filter(
  function (doc) {
    return r.expr(["HUAWEI","SAMSUNG","OPPO",])
            .contains(doc("manufacturer"));
  }
).getField("serial")

查询内 display 里面数据中的 width 字段

r.db('stf').table("devices").filter(
  function (doc) {
    return r.expr([480,1080])
            .contains(doc("display")("width"));
  }
)

获取多个数据

db.run(r.table("devices").filter(function (doc){
      return r.expr(manufacturer).contains(doc("manufacturer"))
       .and(r.expr([version]).contains(doc("version")))
        .and(r.expr([width]).contains(doc("display")("width")))
          .and(r.expr([height]).contains(doc("display")("height")))
      }).getField('serial'))

删除数组中的段数据
数据格式

{
"serial": [
"chess" ,
"nba" ,
"fifa"
] ,
id: "123456"
}
//删除serial数组中的abc,
r.db('stf').table(...).get("123456").update({serial: r.row("serial").difference(["abc"])})

联合查询

r.db('stf').table('tasklist').innerJoin(
  r.db('stf').table('apkinfo'),
  function (tasklist, apkinfo) {
    return tasklist('fileID').eq(apkinfo('id'));
  })
  .map({
  id: r.row('right')('id'),
  detail:r.row('left')('detail'),
  taskid:r.row('left')('taskid'),
  appName: r.row('right')('appName')
  })
  .filter(r.row('taskid').eq(taskid))
共收到 4 条回复 时间 点赞

现在做 stf 二次开发的越来越多了呀~

看的我泪流满面的,过了这么久,终于有人发跟 STF 相关的文章了

0x88 #2 · 2016年12月12日 Author

#2 楼 @codeskyblue 主要是我懒,写文档好费精力。

获取小米和华为的手机可以用

r.db('stf').table('devices').filter(r.row('manufacturer').eq('XIAOMI').or(r.row('manufacturer').eq('HUAWEI')))

获取两个字段

r.db('stf').table('devices').pluck(['serial','manufacturer'])

增加和修改某个字段直接 update({'a':'b'}) 就可以了。如果替换字段中的 json,可以用 r.literal
共同交流👍

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册