2017-01-19 5 views
1

간단한 방법으로 RethinkDB에서 조인을 사용하려고합니다.기본 키가 너무 길어서 RethinkDB에 eqJoin이 없습니다.

[ 
    { 
     id: "user1", 
     inventory: [ 
      { 
       itemid: '1418676', 
       name: 'foo' 
      }, 
      { 
       itemid: '2849', 
       name: 'bar' 
      } 
     ] 
    }, 
    { 
     id: "user2", 
     inventory: [ 
      { 
       itemid: '98742', 
       name: 'top' 
      }, 
      { 
       itemid: '6217', 
       name: 'kek' 
      } 
     ] 
    } 
] 

그리고 가격 테이블 :

r.table('users')('inventory').default([]).eqJoin('name', r.table('prices')).without({ 
    right: 'name' 
}).zip() 

는이 같은 각 사용자에 대한 항목의 목록을 가지고 :

는 문서에 표시된 것처럼 내가 시도 쿼리입니다
[ 
    { 
     name: 'foo', 
     price: 42 
    }, 
    { 
     name: 'bar', 
     price: 41 
    }, 
    { 
     name: 'top', 
     price: 40 
    }, 
    { 
     name: 'kek', 
     price: 69 
    } 
] 

하지만 몇 가지 이유로 드라이버에서 오류가 발생합니다 :

e: Primary key too long (max 127 characters): [ 
    "foo", 
    "bar", 
    "top", 
    "kek", 
    "and all the other items name" 
] 

답변

1

r.table('users')('inventory')은 일련의 배열이므로 r.table('users')('inventory')('name')은 단일 이름이 아니고 이름 배열입니다.

아마도 concatMap을 사용하면 원하는 결과를 얻을 수 있습니다. 예를 들면 다음과 같습니다.

+0

이 방법은 완벽하게 작동합니다. concatMap을 사용하여 직접 해결할 수있는 방법을 찾았지만 해결책은 명확합니다. – Maarethyu