如何在RethinkDB中基于复合主键执行关联查询?
在RethinkDB中对含数组型复合主键的表执行关联查询
你提到的写法有个小问题——eq_join的第一个参数如果传字符串的话,RethinkDB会把它当作字段名去查找,但你的表2里并没有id[0]这个字段,而是要从id数组里取第一个元素来关联表1的id。
正确的做法是用匿名函数来指定关联的键值,具体代码如下:
r.table("table1") .eq_join( # 取表1当前行的id作为关联键 r.row("id"), # 指定关联的右表为table2 r.table("table2"), # 定义右表的关联键:从id数组中取第一个元素 {index: r.row("id")(0)} ) # 可选:用zip()合并关联后的左右表数据,避免嵌套结构 .zip() .run(conn)
你也可以换一种逻辑,从表2出发关联表1,写法更简洁:
r.table("table2") .eq_join(r.row("id")(0), r.table("table1")) .zip() .run(conn)
关键知识点解释:
- 当关联键不是直接的字段,而是字段的衍生值(比如数组元素)时,必须用
r.row()动态获取当前行的字段并处理,不能直接写字符串形式的id[0]。 eq_join的第三个参数index用于指定右表的关联键,若从左表关联右表,第一个参数是左表键,第三个参数是右表键;反之则顺序调换。zip()方法会把关联后分别存在left和right字段的左右表数据合并成一个文档,更便于查看和使用。
如果之前的写法返回空结果,就是因为RethinkDB在尝试查找不存在的id[0]字段,换成上面的函数写法就能解决问题啦。
内容的提问来源于stack exchange,提问作者Mohamed20884
相关产品推荐
相关产品推荐

