重新思考合并数组
Rethink merge array
我有一个问题 -
r.table('orgs')
.filter(function(org) {
return r.expr(['89a26384-8fe0-11e8-9eb6-529269fb1459', '89a26910-8fe0-11e8-9eb6-529269fb1459'])
.contains(org('id'));
})
.pluck("users")
这 returns 以下输出 -
{
"users": [
"3a415919-f50b-4e15-b3e6-719a2a6b26a7"
]
} {
"users": [
"d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
}
如何得到结果 -
[
"3a415919-f50b-4e15-b3e6-719a2a6b26a7","d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
首先,不要直接在 table 上使用那个复杂且耗费资源的 .filter
。由于您测试的字段已经编入索引 (id
),您可以:
r.table('orgs').getAll('89...59', '89...59')
或
r.table('orgs').getAll(r.args(['89...59', '89...59']))
速度更快(方式!)。我最近发现 this article 速度有多快。
现在要使用 brackets 操作获取 users
的数组而不换行:
r.table('orgs').getAll(...).pluck('users')('users')
将提供类似
的结果
[
'123',
'456'
],
[
'123',
'789'
]
我们刚刚删除了 "users"
包装,但结果是一个数组数组。让我们用 .concatMap
:
展平这个二维数组
r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
return usrs;
})
现在我们已将子数组连接成一个,但是我们看到了重复项(从我之前的结果示例中,您有两次 '123'
)。只是 .distinct
事情:
r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
return usrs;
}).distinct()
根据我举的例子,你现在有:
'123',
'456',
'789'
瞧瞧!
我有一个问题 -
r.table('orgs')
.filter(function(org) {
return r.expr(['89a26384-8fe0-11e8-9eb6-529269fb1459', '89a26910-8fe0-11e8-9eb6-529269fb1459'])
.contains(org('id'));
})
.pluck("users")
这 returns 以下输出 -
{
"users": [
"3a415919-f50b-4e15-b3e6-719a2a6b26a7"
]
} {
"users": [
"d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
}
如何得到结果 -
[
"3a415919-f50b-4e15-b3e6-719a2a6b26a7","d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
首先,不要直接在 table 上使用那个复杂且耗费资源的 .filter
。由于您测试的字段已经编入索引 (id
),您可以:
r.table('orgs').getAll('89...59', '89...59')
或
r.table('orgs').getAll(r.args(['89...59', '89...59']))
速度更快(方式!)。我最近发现 this article 速度有多快。
现在要使用 brackets 操作获取 users
的数组而不换行:
r.table('orgs').getAll(...).pluck('users')('users')
将提供类似
的结果[
'123',
'456'
],
[
'123',
'789'
]
我们刚刚删除了 "users"
包装,但结果是一个数组数组。让我们用 .concatMap
:
r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
return usrs;
})
现在我们已将子数组连接成一个,但是我们看到了重复项(从我之前的结果示例中,您有两次 '123'
)。只是 .distinct
事情:
r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
return usrs;
}).distinct()
根据我举的例子,你现在有:
'123',
'456',
'789'
瞧瞧!