2016-02-09 4 views
0

У меня есть два документа, в ReThink дб, как показано нижесливающиеся две записи таблицы из ReThink дб

Роли:

{"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 в: –

Смежные вопросы