1

2 つの単純なテーブルがあります。

ユーザー テーブル:

{
"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"
}

役割表:

{
"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

私は何を間違っていますか?なぜですか? 目的の出力により、ユーザーに権限が付与されます。

4

1 に答える 1

1

roles問題は、テーブル内でidofAdminではなくroleofを使用してドキュメントを検索しようとしていることですAdminroleテーブルにインデックスがあると仮定するとroles(そうでない場合は、 を記述して追加できます)、呼び出しに追加する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)
    })
    )      
});
于 2016-06-24T08:36:37.467 に答える