使用 concatMap 连接表
Join tables with concatMap
r.table('users').hasFields('name').concatMap(function(user) {
return r.table("bets").getAll(
user('userID'),
{ index: "userID" }
).map(function(bet) {
return { left: user, right: bet }
})
})
目标:读取所有用户及其投注。所有投注都应该在一个数组中。
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": [{
"id": "4987c183-edc1-4cd0-9c8d-f51357b86908",
"bet": "foo",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
},
{
"id": "18e95569-107f-4182-85c1-7df269880978",
"bet": "bar",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
},
]
}
我实际得到的是:
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": {
"bet": "foo",
"id": "4987c183-edc1-4cd0-9c8d-f51357b86908",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
}
},
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": {
"bet": "bar",
"id": "18e95569-107f-4182-85c1-7df269880978",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
}
},
我可以通过循环所有条目来得到我的结果,这有点痛苦。有没有办法在 rethinkdb 中使用查询来做到这一点?
你可能想要这样的东西:
r.table('users').hasFields('name').map(function(user) {
return {
left: user,
right: r.table('bets').getAll(user('userID'), {index: 'userID'}),
};
})
多亏了https://whosebug.com/users/3200554/mlucy,我才能让它工作:
r.table('users').hasFields('name').map(function(user) {
return {
user: user,
bets: r.table('bets').getAll(user('userID'), {index: 'userID'}).coerceTo('array'),
};
}
我不得不稍微调整查询并添加 coerceTo('array')
因为否则它会抛出
ReqlQueryLogicError: Expected type DATUM but found SELECTION
异常。
r.table('users').hasFields('name').concatMap(function(user) {
return r.table("bets").getAll(
user('userID'),
{ index: "userID" }
).map(function(bet) {
return { left: user, right: bet }
})
})
目标:读取所有用户及其投注。所有投注都应该在一个数组中。
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": [{
"id": "4987c183-edc1-4cd0-9c8d-f51357b86908",
"bet": "foo",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
},
{
"id": "18e95569-107f-4182-85c1-7df269880978",
"bet": "bar",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
},
]
}
我实际得到的是:
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": {
"bet": "foo",
"id": "4987c183-edc1-4cd0-9c8d-f51357b86908",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
}
},
{
"left": {
"name": "Eki95",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965"
},
"right": {
"bet": "bar",
"id": "18e95569-107f-4182-85c1-7df269880978",
"userID": "525dc15b-ebde-464b-a936-bab4ed7e4965",
}
},
我可以通过循环所有条目来得到我的结果,这有点痛苦。有没有办法在 rethinkdb 中使用查询来做到这一点?
你可能想要这样的东西:
r.table('users').hasFields('name').map(function(user) {
return {
left: user,
right: r.table('bets').getAll(user('userID'), {index: 'userID'}),
};
})
多亏了https://whosebug.com/users/3200554/mlucy,我才能让它工作:
r.table('users').hasFields('name').map(function(user) {
return {
user: user,
bets: r.table('bets').getAll(user('userID'), {index: 'userID'}).coerceTo('array'),
};
}
我不得不稍微调整查询并添加 coerceTo('array')
因为否则它会抛出
ReqlQueryLogicError: Expected type DATUM but found SELECTION
异常。