根据 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'));
  })};
})