Spec-Zone.ru › RethinkDB javascript

Команда 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().orderBy(r.desc('reduction')).run(conn, callback)

Результат:

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

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

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

Результат:

[
    {
        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, callback)

Результат:

[
    {
        group: "Alice",
        reduction: [
            {id: 5, player: "Alice", points: 7, type: "free"}
        ]
    },
    {
        group: "Bob",
        reduction: [
            {id: 11, player: "Bob", points: 10, type: "free"}
        ]
    }
}

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

r.expr([1,2,2,2,3,3]).group(r.row).count().ungroup().orderBy('reduction').nth(-1)('group').run(conn, callback)

Результат:

2

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

r.table('games').group('player').typeOf().run(conn, callback) // Returns "GROUPED_STREAM"
r.table('games').group('player').ungroup().typeOf().run(conn, callback) // Returns "ARRAY"
r.table('games').group('player').avg('points').run(conn, callback) // Returns "GROUPED_DATA"
r.table('games').group('player').avg('points').ungroup().run(conn, callback) // Returns "ARRAY"

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

  • group

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

Spec-Zone.ru

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