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
。使用它不像使用子查询那么容易