根据id字段

时间:2015-12-10 00:01:16

标签: rethinkdb

我有一个用户和团队的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"
}
]

是否可以根据对象字段合并对象数组,还是应该在应用程序级别执行此操作?还有更好的方法吗?

1 个答案:

答案 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'));
  })};
})