0

我有一个疑问 -

 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"
]
4

1 回答 1

3

首先,不要.filter直接在桌子上使用那种复杂且耗费资源的东西。由于您的测试字段已编入索引 ( id),您可以:

r.table('orgs').getAll('89...59', '89...59')

或者

r.table('orgs').getAll(r.args(['89...59', '89...59']))

这是更快的方式(方式!)。我最近发现这篇文章说它有多快。

现在使用方括号操作获得一个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'

瞧!

于 2018-09-02T10:44:41.383 回答