我有一个用户和团队的M-N关系&我正在尝试使用子网策略而不是标准的3表SQL策略。
user = {
id: 'user1',
teams: [{'team1', roles: ['admin']}, {'team2', roles: ['editor']}]
}
team = {
id: 'team1',
name: 'The Team #1'
}
我想抓住name
表中的team
字段并将其粘贴到相应的子目录中:
query = {
id: 'user1',
teams: [{'team1', roles: ['admin'], name: 'The Team #1'}, {'team2', roles: ['editor'], name: 'The Team #2'}]
}
我可以轻松地获得团队文档,但我会覆盖teams
数组:
//Query
r.table('users').get('user1').merge(function(user) {
return {
teams: r.table('teams').getAll(r.args(user('teams')
.map(function(team) {return team('id')}))).coerceTo('array')
}
})
//Bad result
user.teams = [
{
"id": "team1" ,
"name": "team 1"
} ,
{
"id": "team2" ,
"name": "team 2"
}
]
是否可以根据对象字段合并对象数组,还是应该在应用程序级别执行此操作?还有更好的方法吗?
答案 0 :(得分:2)
如果teams
数组具有团队的ID,您可以执行以下操作:
r.table('users').get('user1').merge(function(user) {
return {teams: user('teams').merge(function(team) {
return r.table('teams').get(team('id'));
})};
})