假设我有一个带有一个名为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(),以便我可以实时更新用户最喜欢的用户状态更改
答案 0 :(得分:1)
eqJoin
可以在嵌入式文档上运行,但它可以通过比较我们从嵌入式文档转换/选择的值来标记右表上的二级索引。
在任何其他复杂的加入中,我宁愿将concatMap
与getAll
一起使用。
我们可以说我们可以抓取他们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"))
})
)
理想情况下,现在您可以通过查询所需的额外数据来获取数据并自行进行连接。我的查询可能有一些语法/错误,但我希望它能给你一个想法