rethinkdb查询中的非写入替换/更新

时间:2013-12-08 20:25:54

标签: rethinkdb rethinkdb-python

我是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 个答案:

答案 0 :(得分: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"]})