根据 id 字段合并 2 个对象子文档数组
Merge 2 arrays of objects subdocs based on id field
我有用户和团队的 M-N 关系,我正在尝试使用子文档策略而不是标准的 3-table SQL 策略。
user = {
id: 'user1',
teams: [{'team1', roles: ['admin']}, {'team2', roles: ['editor']}]
}
team = {
id: 'team1',
name: 'The Team #1'
}
我想从 team
table 中获取 name
字段并将其粘贴到适当的子文档中:
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"
}
]
是否可以合并基于对象字段的对象数组,或者我应该在应用程序级别这样做吗?有没有更好的方法?
如果teams
数组中有球队的ID,你可以这样做:
r.table('users').get('user1').merge(function(user) {
return {teams: user('teams').merge(function(team) {
return r.table('teams').get(team('id'));
})};
})
我有用户和团队的 M-N 关系,我正在尝试使用子文档策略而不是标准的 3-table SQL 策略。
user = {
id: 'user1',
teams: [{'team1', roles: ['admin']}, {'team2', roles: ['editor']}]
}
team = {
id: 'team1',
name: 'The Team #1'
}
我想从 team
table 中获取 name
字段并将其粘贴到适当的子文档中:
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"
}
]
是否可以合并基于对象字段的对象数组,或者我应该在应用程序级别这样做吗?有没有更好的方法?
如果teams
数组中有球队的ID,你可以这样做:
r.table('users').get('user1').merge(function(user) {
return {teams: user('teams').merge(function(team) {
return r.table('teams').get(team('id'));
})};
})