使用 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'))})
})
}
})
我在连接两个表时遇到一些问题。
我有两个表:
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'))})
})
}
})