你可以使用rethinkdb在文档中使用嵌入式数组进行连接吗?

时间:2015-10-11 01:48:44

标签: rethinkdb

假设我有一个带有一个名为favoriteUsers的属性的用户表,这是一个嵌入式数组。即。

用户

{
  name:'bob'
  favoriteUsers:['jim', 'tim'] //can you have an index on an embedded array?
}

user_presence

{
   name:'jim', //index on name
   online_since:14440000
}

我可以使用嵌入属性对内部或eqJoin进行反对说第二个表,还是我必须将favoriteUsers从users表中拉出来并像传统的sql一样进入连接表?

r.table('users')
 .getAll('bob', {index:'name'})
  // inner join  user_presence on user_presence.name in users.highlights
 .eqJoin("name", r.table('user_presence'), {index:'name'})

最后,我想在查询上调用changes(),以便我可以实时更新用户最喜欢的用户状态更改

1 个答案:

答案 0 :(得分:1)

eqJoin可以在嵌入式文档上运行,但它可以通过比较我们从嵌入式文档转换/选择的值来标记右表上的二级索引。

在任何其他复杂的加入中,我宁愿将concatMapgetAll一起使用。

我们可以说我们可以抓取他们user_presence的用户和favoriteUsers

r.table('users')
.getAll('bob', {index: 'name'})
.concatMap(function(user) {
  return r.table('user_presence').filter(function(presence) {
    return user("favoriteUsers").contains(presence("name"))
  })
)

理想情况下,现在您可以通过查询所需的额外数据来获取数据并自行进行连接。我的查询可能有一些语法/错误,但我希望它能给你一个想法