Spec-Zone.ru › RethinkDB java

Команда 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"

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

  • group

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

Spec-Zone.ru

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