2016-02-09 90 views
0

我在反思分贝两个文件像下面合并两个表中的记录

角色:

{"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"} 

回答

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

只是另一种解决方案:

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

或重写未完善的在较短的方式解决:

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

大。这对我行得通。 –

+1

现在,如果用户只有一个角色,那么它会在“RqlRuntimeError:预期类型ARRAY但在STRING中找到”时抛出异常。 –