Команда 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"
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/ungroup/