2013-12-08 7 views
0

Я новичок в rethinkdb и имею простые проблемы. Пусть я следующие объекты структуры:non writing replace/update in rethinkdb query

 
Table A: 
[{ 
    'id': '1', 
    'b_list': ['11', '12'] 
}] 
Table B: 
[{ 
    'id': '11', 
    'value': 'somevalue1' 
},{ 
    'id': '12', 
    'value': 'somevalue2' 
}] 

Так экземпляр «А» продолжает отношения к двум «В» случаях.

Какой запрос я должен сделать в rethinkdb для получения следующего ответа?

 
[{ 
    'id': '1', 
    'b_list': [ 
     { 
      'id': '11', 
      'value': 'somevalue1' 
     },{ 
      'id': '12', 
      'value': 'somevalue2' 
     } 
    ] 
}] 

Я хочу видеть примеры B вместо их идентификаторов в ответ, и я не хочу, чтобы это изменить, чтобы спастись.

ответ

1

Лучший способ сделать это с eq_join как так:

r.table("A") 
    .map(lambda x: 
    x.merge({ 
     "b_list" : 
     x["b_list"].eq_join(lambda x: x, r.table("B"))["right"]}) 

Для одного документа:

r.table("A").get(pk) 
    .do(lambda x: 
    x.merge({ 
     "b_list" : 
     x["b_list"].eq_join(lambda x: x, r.table("B"))["right"]}) 
+0

да, вы правы, это все. , который отлично работает, если мне нужно получить все данные из таблицы A таким образом. , но что, если мне это нужно только для одной записи, с id = "1" , больше не нужно использовать карту, но нам все равно нужно слить r.table ("A"). Get ("1"). ({'b_list': XXX ["b_list"]. eq_join (lambda bla bla bla)}) Что мне следует помещать вместо XXX для доступа к документу, с которым я сейчас сливаюсь. есть ли что-то вроде «я» в запросах? – Stqs

+0

Если это только один документ, тогда вы хотите использовать 'do' вместо' map', я собираюсь отредактировать ответ, чтобы включить его. –

+0

большое спасибо – Stqs