【问题标题】:merging two table records from rethink db从 rethink db 合并两个表记录
【发布时间】:2016-02-09 14:47:41
【问题描述】:

我在 rethink db 中有两个文档,如下所示

角色:

{"Name":  "client" ,"id":  "dfd1a03d-ddb2-458e-8379-f443daa0fcfd"} 
{"Name":  "admin" ,"id":  "c1ed66a4-8e72-416b-8237-c4a0518826c8"
}

用户:

{"id":  "ae9aaaea-24b6-4880-9a81-d6ee34c82dde" ,
"password":  "$2a$10$MqaQjif6bigsoYV82s/SXeWsQQ9.NnEPykw1L/nLcfOmWRryq8XJe" ,
"roles": ["c1ed66a4-8e72-416b-8237-c4a0518826c8" ,"dfd1a03d-ddb2-458e-8379-f443daa0fcfd"
] ,
"userName":  "jbadly"
}

我想合并这两个表记录并显示如下

{"id":  "ae9aaaea-24b6-4880-9a81-d6ee34c82dde" ,
"password":  "$2a$10$MqaQjif6bigsoYV82s/SXeWsQQ9.NnEPykw1L/nLcfOmWRryq8XJe" ,
"roles": ["admin" ,"client"] ,"userName":  "james"}

【问题讨论】:

    标签: merge rethinkdb


    【解决方案1】:

    你的问题有点不清楚,但如果我理解正确的话:

    r.db('my_db').table('users')
      .map(function(row) {
        return row.merge({
          roles: r.db('my_db').table('roles')
            .getAll(r.args(row('roles')))
            .coerceTo('array')
        })
      })
    

    【讨论】:

      【解决方案2】:

      只是另一种解决方案:

      r.table('users').merge({
          roles: r.row('roles').map(function(role) {
            return r.table('roles').get(role)('Name')
          })
        })
      

      或者用更短的方式重写 Kludge 的解决方案:

      r.table('users').merge({
          roles: r.table('roles').getAll(r.args(r.row('roles')))('Name').coerceTo('ARRAY')
        })
      

      【讨论】:

      • 现在如果用户只有一个角色,那么它会在“RqlRuntimeError: Expected type ARRAY but found STRING in:”下面抛出异常
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多