RethinkDB使用连接结果更新值

时间:2017-03-23 20:38:22

标签: join rethinkdb

我的rethinkdb上有3个表的结构。

  • feed - 拥有产品名称和覆盖范围信息
  

{“product”:“name-x”,     “覆盖率”:“3%”}

  • clean - 产品名称中的同义词列表
  

{“product”:“name-x”,     “synonymous”:[“name-x”,“X”,“product-x”]}

  • 设备 - 设备列表和一些额外信息
  

{“product”:“product-x”,     “coverage”:“0%”},{“product”:“product-y”,“coverage”:“1%”},{“product”:“product-x”,     “覆盖率”:“0%”}

我们将定期更新 Feed 表,然后运行查询以更新设备表。

执行以下操作,我可以合并所有表格,并从每个设备获得正确的覆盖范围。

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 个答案:

答案 0 :(得分: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")
})