我有一个查询-
r.table('orgs')
.filter(function(org) {
return r.expr(['89a26384-8fe0-11e8-9eb6-529269fb1459', '89a26910-8fe0-11e8-9eb6-529269fb1459'])
.contains(org('id'));
})
.pluck("users")
这将返回以下输出-
{
"users": [
"3a415919-f50b-4e15-b3e6-719a2a6b26a7"
]
} {
"users": [
"d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
}
如何获得结果--
[
"3a415919-f50b-4e15-b3e6-719a2a6b26a7","d8c4aa0a-8df6-4d47-8b0e-814a793f69e2"
]
答案 0 :(得分:3)
首先,不要直接在表上使用复杂而耗资源的.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'
等等!