rethinkdb join:无法减少空流
rethinkdb join: Cannot reduce over an empty stream
我有两个简单的表:
用户Table:
{
"activated": true ,
"created": Wed Jun 22 2016 15:22:32 GMT+00:00 ,
"email": email@email.com, »
"id": "5071f620-576a-49c0-ae84-e9f32db2a034" ,
"roles": [
"Admin"
] ,
"sso": "123456789"
}
角色 Table:
{
"id": "f62b1d29-84d1-4bad-a359-dacb8678f607" ,
"permissions": [
"add" ,
"delete"
] ,
"role": "Admin"
}
我正在运行查询获取给定用户的权限。我正在执行以下操作:
r.db('content').table("users").merge(function(user){
return r.object(
'permissions', user('roles').eqJoin(function(id){
return id
}, r.db('content').table('roles')).zip()('permissions')
.reduce(function(left, right){
return left.merge(right)
})
)
});
但是我得到一个错误:
Server error:
e: Cannot reduce over an empty stream
我做错了什么,为什么?我想要的输出会给我一个拥有他们权限的用户。
问题是它试图在 roles
table 中查找 id
为 Admin
而不是 role
的文档Admin
。假设你在 roles
table 中有一个 role
的索引(如果你没有,你可以通过写 r.db('content').table('roles').indexCreate('role')
添加一个),你应该能够修复它将 {index: 'role'}
添加到 eqJoin
调用中。
r.db('content').table("users").merge(function(user){
return r.object(
'permissions', user('roles').eqJoin(function(id){
return id
}, r.db('content').table('roles'), {index: 'role'}).zip()('permissions')
.reduce(function(left, right){
return left.merge(right)
})
)
});
我有两个简单的表:
用户Table:
{
"activated": true ,
"created": Wed Jun 22 2016 15:22:32 GMT+00:00 ,
"email": email@email.com, »
"id": "5071f620-576a-49c0-ae84-e9f32db2a034" ,
"roles": [
"Admin"
] ,
"sso": "123456789"
}
角色 Table:
{
"id": "f62b1d29-84d1-4bad-a359-dacb8678f607" ,
"permissions": [
"add" ,
"delete"
] ,
"role": "Admin"
}
我正在运行查询获取给定用户的权限。我正在执行以下操作:
r.db('content').table("users").merge(function(user){
return r.object(
'permissions', user('roles').eqJoin(function(id){
return id
}, r.db('content').table('roles')).zip()('permissions')
.reduce(function(left, right){
return left.merge(right)
})
)
});
但是我得到一个错误:
Server error:
e: Cannot reduce over an empty stream
我做错了什么,为什么?我想要的输出会给我一个拥有他们权限的用户。
问题是它试图在 roles
table 中查找 id
为 Admin
而不是 role
的文档Admin
。假设你在 roles
table 中有一个 role
的索引(如果你没有,你可以通过写 r.db('content').table('roles').indexCreate('role')
添加一个),你应该能够修复它将 {index: 'role'}
添加到 eqJoin
调用中。
r.db('content').table("users").merge(function(user){
return r.object(
'permissions', user('roles').eqJoin(function(id){
return id
}, r.db('content').table('roles'), {index: 'role'}).zip()('permissions')
.reduce(function(left, right){
return left.merge(right)
})
)
});