2017-01-19 1 views
1

簡単な方法でRethinkDBで結合を使用しようとしています。RethinkDBでeqJoinで主キーが長すぎます

ドキュメントに示されているようにこれは、私が試したクエリです:

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

私はこのような各ユーザのアイテムリストがあります。

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

と価格表:

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

関連する問題