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