2017-03-23 8 views
2

私はrethinkdbに3つのテーブルの構造を持っています。RethinkDBは結合結果を使用して値を更新します

  • フィード - 製品名およびカバレッジ情報を有する

{ "製品": "名前-X"、 "カバレッジ": "3%"}

  • クリーン - 製品名から同義語のリスト

{ "製品": "名前-X"、 "同義": "名前-X"、 "X"、 "製品X"]}

  • デバイス - のリストデバイスといくつかの追加情報

{ "製品": "製品X"、 "カバレッジ": "0%"}、{ "製品": "製品Y"、 "カバレッジ"。 "1%"}、{"製品": "製品-x"、 "カバレッジ": "0%"}

フィードテーブルを定期的に更新してから、デバイステーブルを更新するクエリを実行します。

以下を実行すると、すべてのテーブルをマージして、各デバイスから適切な範囲を取得できます。

r.db('devices').table('cleaning').innerJoin(r.db('devices').table('feed'), 
function(cleaningRow, feedRow) { 
    return cleaningRow('synonyms').contains(feedRow('product')) 
}).zip().innerJoin(r.db('devices').table('devices').hasFields('product'), 
function(mergeRow, devicesRow) { 
    return mergeRow('synonyms').contains(devicesRow('product')) 
}).zip() 

どのように私は正しい情報でデバイステーブルを更新することができますか?今のところ、私はクエリで値を取得することしかできませんでした。


デバイステーブルが非常に大きい、と私たちは、製品名は、我々が「クリーニング」テーブルを使用している理由です、ものになるかどうかのコントロールを持っていません。また、デバイスのテーブルに「同じ」デバイスが複数存在する可能性があります。

答えて

1
r.db("dbName") 
.table("tblName").innerJoin(
    r.db("dbName").table("tblName1"), function(tl, path){ 
    return tblName("value1").eq(path("value1")); 
    } 
).map({ 
filterkey: r.row("left")("filterkey") 
}) 
関連する問題