使用 RethinkDB 加入阵列

Joining on array with RethinkDB

我在连接两个表时遇到一些问题。

我有两个表:

Qas

[{
  "course":  "swd" ,
  "id":  "c9b2e8cb-15f9-4f93-b677-6dff2880d383" ,
  "number": 1 ,
  "questions": [
    {
      "date":  "Wednesday, December 16th, 2015, 11:09" ,
      "owner": 4362445 ,
      "question":  "Could you explain promises?" ,
      "questionid":  "2766d4bf-fd79-4f94-8d22-788d4e6b89c2" ,
    }
] ,
"session": 1 ,
"unit": 1
}]

用户

[{
  "avatar_url": https://avatars.githubusercontent.com/u/4362445?v=3, »
  "displayName":  "Jamie" ,
  "id": 4362445 ,
  "oauth_token":  "46451371bffea867a71b9cc357eff4fd9a06591e" ,
  "role":  "student" ,
  "team": {
  "id": 1729535 ,
  "name":  "dwa-group-a"
} ,
"username":  "Jamiek94"
}]

现在我想在 (users -> id) 上加入 (qas -> questions -> owner),最后将它们压缩在一起。 所以结果看起来像这样:

[{
  "course":  "swd" ,
  "id":  "c9b2e8cb-15f9-4f93-b677-6dff2880d383" ,
  "number": 1 ,
  "questions": [
    {
      "date":  "Wednesday, December 16th, 2015, 11:09" ,
      "owner": 4362445 ,
      "question":  "Could you explain promises?" ,
      "questionid":  "2766d4bf-fd79-4f94-8d22-788d4e6b89c2" ,
      "user" : {
        "avatar_url": https://avatars.githubusercontent.com/u/4362445?v=3, »
        "displayName":  "Jamie" ,
        "id": 4362445 ,
        "oauth_token":  "46451371bffea867a71b9cc357eff4fd9a06591e" ,
        "role":  "student" ,
        "team": {
        "id": 1729535 ,
        "name":  "dwa-group-a"
     }
    }
] ,
"session": 1 ,
"unit": 1
}]

我正在使用的查询是:

r.db('GitSmurf').table('qa').eqJoin(r.row('questions')('owner'), r.db('GitSmurf').table('users'), { index : 'id'})

这导致:

No results were returned for this query

您的 questions 是一个数组,因此您不能使用 r.row('questions')('owner')

我们可以从头开始 eqJoin,然后用 map 手动加入。像这样的东西应该适合你:

r.table('Qas').merge(function(qa) {
  return {
    questions: qa('questions').map(function(q) {
      return q.merge({user: r.table('Users').get(q('owner'))})
    })
  }
})