Rethinkdb 如何在数据库中填充

Rethinkdb 如何在数据库中填充,rethinkdb,Rethinkdb,我有两张桌子: Left: { id: String, title: String, key: String // for mapping with table Right } Right: { id: String title: String description: String } RejectionDB有eqJoin()和zip()方法,可以帮助我们从右表到左表克隆所有字段: r.db("myDB").table("Left"

我有两张桌子:

Left: 
{
  id: String,
  title: String,
  key: String // for mapping with table Right
}

Right:
{
 id: String
 title: String
 description: String
}
RejectionDB有eqJoin()和zip()方法,可以帮助我们从右表到左表克隆所有字段:

r.db("myDB").table("Left")
.eqJoin("key", r.db("myDB").table("Right"))
.zip()
结果如下所示:

[{
  id: "the-id",
  key: "Right-object-id",
  title: "Title of Right Object",
  description: "Description of Right Object"
  // => title of Left Object was deleted
}]
[{
  id: "the-id",
  key: {
     id: "Right-object-id"
     title: "Title of Right Object"
     description: "Description of Right Object"
  }
}]
问题是: 如何模拟Mongoose的populate()这样的查询?

我希望结果如下所示:

[{
  id: "the-id",
  key: "Right-object-id",
  title: "Title of Right Object",
  description: "Description of Right Object"
  // => title of Left Object was deleted
}]
[{
  id: "the-id",
  key: {
     id: "Right-object-id"
     title: "Title of Right Object"
     description: "Description of Right Object"
  }
}]

这是一个解决方案,但我正在寻找一个更好的解决方案:

r.db('myDB').table("Left").eqJoin("Right",r.db("myDB").table("Right"))
.map(function(row){
  return row("left").merge({key: row("right")})
})

我不确定你是否认为以下是一个更好的解决方案,因为我不知道你的查询有什么错误,只要你使用<代码>索引< /> >,查询是快速而有效的。

r.db('myDB').table("Left").map(function (doc) {
   return doc.merge({key: r.db('myDB').table('Right').get(doc('key'))})
})

但是,默认情况下,此查询始终在右表上使用主索引,因为我们使用eqJoin使用
get

您可以使用
eqJoin
映射结果:

r.db("myDB").table("Left")
.eqJoin("key", r.db("myDB").table("Right"))
.map(function (row){
  return row('left').merge({ key: row('right') })
})
子查询

虽然您可以在RequiredDB中使用
eqJoin
,但子查询通常更易于使用且功能更强大。您可以使用
merge
术语添加新键,然后使用子查询设置该键的值:

r.db("myDB").table("Left")
.merge(function (row){
  return {
    'key': r.db("myDB").table("Right")).get(row('key'))
  }
})
我通常从不使用
eqJoin
。使用它不像使用子查询那么容易