Команда ReQL: ungroup
Синтаксис команды
grouped_stream.ungroup() → array grouped_data.ungroup() → array
Описание
Принимает сгруппированный поток или сгруппированные данные и преобразует их в массив объектов, представляющих группы. Любые команды, присоединённые после ungroup, будут работать с этим массивом, а не с каждой группой по отдельности. Это полезно, если, например, вы хотите отсортировать группы по значению их сворачивания.
Формат массива, возвращаемого командой ungroup, соответствует стандартному формату сгруппированных данных в драйвере JavaScript и Data Explorer.
Предположим, что таблица 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").g("points").ungroup()
.orderBy(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": 15
},
{
"group": "Alice",
"reduction": 7
}
]
Обратите внимание, что если вы не вызывали ungroup, вы бы вместо этого выбрали одну случайную игру для каждого игрока:
r.table("games").group("player").sample(1).run(conn);
Результат: (Обратите внимание, это JSON-представление List<GroupedResult>; см. документацию по команде group для получения более подробной информации.)
[
{
"group": "Alice",
"values": [
{"id": 5, "player": "Alice", "points": 7, "type": "free"}
]
},
{
"group": "Bob",
"values": [
{"id": 11, "player": "Bob", "points": 10, "type": "free"}
]
}
[
Пример: Нахождение арифметической моды массива значений:
r.expr(r.array([1,2,2,2,3,3])).group(
row -> row
).count().ungroup().orderBy("reduction").nth(-1).bracket("group")
Результат:
2
Пример: Типы данных!
r.table('games').group('player').typeOf().run(conn); // Returns "GROUPED_STREAM"
r.table('games').group('player').ungroup().typeOf().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"
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/ungroup/