RethinkDB - JavaScript加入多个项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RethinkDB - JavaScript加入多个项目相关的知识,希望对你有一定的参考价值。
我有以下数据结构:
persons
[
{
id:1,
firstname:'My name',
talks[
{
talk_id:1,
since:2018-01-01
},
{
talk_id:2,
since:2018-01-01
},
{
talk_id:3,
since:2018-01-01
}
]
},
{
id:2,
firstname:'Other name',
talks[
{
talk_id:1,
since:2018-01-01
}
]
}
]
talks
[
{
id:1
name:'Talk about something'
},
{
id:2
name:'Talk about something else'
},
{
id:3
name:'Talk about nothing'
}
]
我想要一个人的合并对象,里面有分配给这个人的所有谈话。我试图通过文档中给出的示例自己解决它,但我无法弄清楚如何存档。
也许我的数据结构不是正确的noSQL方式?
答案
这样做的方法是:
r.db('tedtalks').table('persons')
.getAll(/* select people here I suppose */)
.merge({
talks: r.row('talks').map(function (talk) {
return talk.merge({
talk: r.db('tedtalks').table('talks').get(talk('talk_id'))
});
})
});
您的结果如下:
[
{
id:1,
firstname:'My name',
talks[
{
talk_id:1,
since:2018-01-01,
talk: {
id: 1,
name: 'Talk about something'
}
},
{
talk_id:2,
since:2018-01-01,
talk: {
id: 2,
name: 'Talk about something else'
}
},
{
talk_id:3,
since:2018-01-01,
talk: {
id: 3,
name: 'Talk about nothing'
}
}
]
},
{
id:2,
firstname:'Other name',
talks[
{
talk_id:1,
since:2018-01-01,
talk: {
id: 1,
name: 'Talk about something'
}
}
]
}
]
在.map
调用中,您可能希望直接返回一个对象,以摆脱talk_id
:
return {
talk: r.db('tedtalks').table('talks').get(talk('talk_id')),
since: talk('since')
};
或者甚至是同一级别的所有东西(只要键不重叠):
return r.db('tedtalks').table('talks').get(talk('talk_id')).merge({
since: talk('since')
});
嗯,你明白了。
以上是关于RethinkDB - JavaScript加入多个项目的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript 在 ReThinkDB 中的 ReQL 中的数组上应用过滤器
Thinky ORM + RethinkDB - 多对多关系