如何在进行连接时重新考虑重新考虑字段

时间:2015-02-16 17:54:23

标签: rethinkdb

我尝试使用以下查询在rethinkdb中对2个表进行连接:

r.db('testdb')
  .table('eco')
  .eqJoin('project_id', r.db('testdb').table('projects'))
  .map(
    function(){ 
      r.row.merge(function(){ 
        r.expr({'right': r.expr({'p_name': r.row['right']['name']})})
      })
    })
    .without(r.expr({'right': r.expr({'id': True})}))
    .without(r.expr({'right': r.expr({'name': True})}))
    .zip()
I keep getting the following error:

TypeError:无法读取属性' name'未定义的

eco表上有一个名称字段以及项目表。

2 个答案:

答案 0 :(得分:4)

您需要使用括号而不是方括号来选择字段。

r.db('testdb')
  .table('eco')
  .eqJoin('project_id', r.db('testdb').table('projects'))
  .map(
    function(doc){ 
      return doc.merge(function(){ 
        return {'right': {'p_name': doc('right')('name')}}
      })
    })
    .without({'right': {'id': True}})
    .without({'right': {'name': True}})
    .zip()

网站说明:

  • 如果你使用某个功能,你不应该使用r.row - 它是一个或另一个,而不是两个。
  • 您不需要在r.expr中包装所有内容

答案 1 :(得分:1)

我觉得这个符号更简洁:

r.db('testdb')
  .table('eco')
  .eqJoin('project_id', r.db('testdb').table('projects'))
  .map((doc) => ({
    left: doc('left'),
    right: { p_name: doc('right')('name') }
  }))
  .zip()

鉴于您只需要p_name表中的projects