Spec-Zone.ru › RethinkDB ruby

Команда ReQL: ungroup

Синтаксис команды

grouped_stream.ungroup() → array
grouped_data.ungroup() → array

Описание

Принимает сгруппированный поток или данные и преобразует их в массив объектов, представляющих группы. Любые команды, связанные после ungroup, будут работать с этим массивом, а не с каждой группой индивидуально. Это полезно, если, например, вы хотите отсортировать группы по значению их сокращения.

Формат массива, возвращаемого ungroup, такой же, как и стандартный родной формат сгруппированных данных в драйвере JavaScript и обозревателе данных.

Предположим, что таблица games содержит следующие данные:

[
    {"id" => 2, "player" => "Bob", "points" => 15, "type" => "ranked"},
    {"id" => 5, "player" => "Alice", "points" => 7, "type" => "free"},
    {"id" => 11, "player" => "Bob", "points" => 10, "type" => "free"},
    {"id" => 12, "player" => "Alice", "points" => 2, "type" => "free"}
]

Пример: Каково максимальное количество набранных очков каждым игроком, начиная с самых результативных?

r.table('games')
   .group('player').max('points')['points']
   .ungroup().order_by(r.desc('reduction')).run(conn)

Результат:

[
    {
        "group" => "Bob",
        "reduction" => 15
    },
    {
        "group" => "Alice",
        "reduction" => 7
    }
]

Пример: Выберите одного случайного игрока и все его игры.

r.table('games').group('player').ungroup().sample(1).run(conn)

Результат:

[
    {
        "group" => "Bob",
        "reduction" => [
            {"id" => 2, "player" => "Bob", "points" => 15, "type" => "ranked"},
            {"id" => 11, "player" => "Bob", "points" => 10, "type" => "free"}
        ]
    }
]

Обратите внимание, что если вы не вызвали ungroup, вы бы вместо этого выбрали одну случайную игру каждого игрока:

r.table('games').group('player').sample(1).run(conn)

Результат:

{
    "Alice" => [
        {"id" => 5, "player" => "Alice", "points" => 7, "type" => "free"}
    ],
    "Bob" => [
        {"id" => 11, "player" => "Bob", "points" => 10, "type" => "free"}
    ]
}

Пример: Нахождение арифметической моды массива значений:

r.expr([1,2,2,2,3,3]).group(){|row| row}.count().ungroup().order_by('reduction').nth(-1)['group'].run(conn)

Результат:

2

Пример: Типы!

r.table('games').group('player').type_of().run(conn) # Returns "GROUPED_STREAM"
r.table('games').group('player').ungroup().type_of().run(conn) # Returns "ARRAY"
r.table('games').group('player').avg('points').run(conn) # Returns "GROUPED_DATA"
r.table('games').group('player').avg('points').ungroup().run(conn) #Returns "ARRAY"

Связанные команды

  • group

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/ungroup/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API