2014-09-30 2 views
0

다음과 같이 하나는 호스트 용이고 다른 하나는 사용자 용입니다.RethinkDB 테이블 조인

호스트 :

{ 
     "host": "server1", 
     "address": "192.168.1.22", 'users': ["Magneto", "Professor Xavier", "Storm"] 
    }, 
    { 
     "host": "server2", 
     "address": "192.168.1.23", 'users': ["Storm"] 
    }, 
    { 
     "host": "server3", 
     "address": "192.168.1.24", 'users': ["Magneto", "Storm"] 
    } 

사용자 :

{ 
     "hero": "Magneto", 
     "name": "Max Eisenhardt", 
     "aka": ["Magnus", "Erik Lehnsherr", "Lehnsherr"], 
     "magazine_titles": ["Alpha Flight", "Avengers", "Avengers West Coast"] 
    }, 
    { 
     "hero": "Professor Xavier", 
     "name": "Charles Francis Xavier", 
     "magazine_titles": ["Alpha Flight", "Avengers", "Bishop", "Defenders"] 
    }, 
    { 
     "hero": "Storm", 
     "name": "Ororo Monroe", 
     "magazine_titles": ["Amazing Spider-Man vs. Wolverine", "Excalibur", 
      "Fantastic Four", "Iron Fist"] 
    } 

은 내가이 사용자가 궁극적으로 각 서버에 대해이 같은 것을 얻기 위해 얻을 수있는 호스트에서 쿼리에 가입 만들려고 해요 . 기본적으로 사용자 데이터를 서버 문서에 결합합니다. 예 :

{ 
"host": "server3", 
"address": "192.168.1.24", 
"users": [ 
    { 
     "hero": "Storm", 
     "name": "Ororo Monroe", 
     "magazine_titles": [ 
      "Amazing Spider-Man vs. Wolverine", 
      "Excalibur", 
      "Fantastic Four", 
      "Iron Fist" 
     ] 
    }, 
    { 
     "hero": "Magneto", 
     "name": "Max Eisenhardt", 
     "aka": [ 
      "Magnus", 
      "Erik Lehnsherr", 
      "Lehnsherr" 
     ], 
     "magazine_titles": [ 
      "Alpha Flight", 
      "Avengers", 
      "Avengers West Coast" 
     ] 
    } 
] 
} 

사용자가 서버 "users"배열에 포함되어 있기 때문에 여기에서 내 쿼리를 어떻게 수행해야합니까?

r.db('data').table("hosts") 
.concatMap(function (x) { 
    return x("users").map(function (usr) { 
    return x.merge({users: usr}); 
}); 
}).eqJoin("users", r.db('data').table("users")) 

답변

1

배열 users가 비어있을 수 있다면, 당신은 추가해야합니다 hero 첫번째

r.db('data').table('users').indexCreate("hero") 

r.db('data').table("hosts").merge(function(host) { 
    return { 
     users: r.table("users").getAll(r.args(host("users")), {index: "hero"}).coerceTo("ARRAY") 
    } 
}) 

에 인덱스를 작성하지 :

내가 시도했지만 지금까지 운은 무엇인가 if 문의 r.branch

r.db('data').table("hosts").merge(function(host) { 
    return r.branch(
     host("users").isEmpty(), 
     {}, 
     { 
       users: r.table("users").getAll(r.args(host("users")), {index: "hero"}).coerceTo("ARRAY") 
     } 
    ) 
})