Rethinkdb操作案例
    以下是Rethinkdb的一些常用的操作案例,基本上足够满足STF的数据库操作

    插入数据
    r.db(“stf”).table(“apkinfo”).insert({
    id: “1”,
    name: “中国象棋”,
    apkname: “boyaa1”,
    version: “1.1.0”,
    size: “30M”,
    uploadday: “2016-07-26”,
    activity: “1”
    })
    所有数据增加一个字段:
    r.db(‘stf’).table(‘tasklist’).update({‘tasktype’:’monkey’})
    在数据表对象中插入一行数据
    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: “20160829”
    ,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(‘20160829’).update({detail:r.row(“detail”).append(rpldata)})
    删除
    r.db(‘stf’).table(‘tasklist’).get(‘20160829’).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(‘20160829’).update({detail:r.row(“detail”).changeAt(第几条数据,data)})



    var version=[]
    var manuf=[]
    var width=[]
    var dpi=[“480*1080”,””]
    数据查询
    查询huawei和sumsang的手机并获取其serial
    r.db(‘stf’).table(“devices”).filter(
    function (doc) {
    return r.expr([“HUAWEI”,”SAMSUNG”,”dfdfd”,])
    .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”: [
    “abc” ,
    “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))