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"ですが、結果は配列の配列になります。この 2D 配列を次のように平坦化しましょう.concatMap:

r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
  return usrs;
})

これで、サブ配列を 1 つに連結しましたが、重複が見られます (前の結果の例では、'123'2 つあるはずです)。ちょうど.distinct事:

r.table('orgs').getAll(...).pluck('users')('users').concatMap(function (usrs) {
  return usrs;
}).distinct()

私が取った例から、あなたは今持っています:

'123',
'456',
'789'

ほら!

于 2018-09-02T10:44:41.383 に答える