2013-12-08 40 views
0

我是新來的rethinkdb,並且有簡單的麻煩。 假設我有以下對象結構:rethinkdb查詢中的非寫入替換/更新

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

所以「A」的情況下保持關係的兩個「B」的情況。

我應該在rethinkdb中執行什麼查詢來檢索以下響應?

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

我想查看B的實例而不是它們的ID作爲響應,我不希望此更改被保存。

回答

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」 不需要再使用map,但我們仍然需要合併 r.table(「A」)。get(「1」)。merge ({'b_list':XXX [「b_list」]。eq_join(lambda bla bla)}) 我應該如何替換XXX來訪問我正在合併的文檔。有沒有像查詢中的「自我」? – Stqs

+0

如果只有一個文檔,那麼您想使用'do'而不是'map',我將編輯答案以包含它。 –

+0

非常感謝 – Stqs