Получить максимальное и минимальное значение с помощью запроса GraphQL - PullRequest
0 голосов
/ 08 октября 2018

Я работал над GraphQL и запускал запросы, чтобы получить ответ JSON в приложение реагирования.

Но мне нужно запустить запрос, который вернет мне максимальное и минимальное значение из столбца.

Я просмотрел документ GraphQL, но нигде не нашел способа сделать это.

{
  schneider(where: {_and: [{device_time: {_gte: "2018-09-04T20:11:42.097+05:30"}}, {device_time: {_lte: "2018-09-04T20:12:43.187+05:30"}}]}) {
    active_energy_received
  }
}

Приведенный выше запрос дает мне список значений, которые находятся между двумя указанными датами.

{
  "data": {
    "schneider": [
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0.82099998
      },
      {
        "active_energy_received": 4.3699998856
      },
      {
        "active_energy_received": 0
      },
      {
        "active_energy_received": 0.820999979972839
      },
      {
        "active_energy_received": 4.3699998856
      }
    ]
  }
}

Теперь вместо всех значений мне нужны только значения max и min из этого списка.

ОБНОВЛЕНИЕ:

Я использую hasura.io с postgreSQL.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Если вы используете Hasura.io, то вы можете использовать настраиваемые запросы API для ORDER BY и LIMIT для результата MIN и MAX.

Пример значения MAX:

query {
  table_name(limit: 1, order_by: {time: desc}) { 
      data 
      time
    }
}

Пример значения MIN:

query {
  table_name(limit: 1, order_by: {time: asc}) { 
      data 
      time
    }
}
0 голосов
/ 08 октября 2018

GraphQL не имеет собственного способа сделать это.(Если SQL является вашей базой, есть много вещей, таких как ORDER BY, GROUP BY, и все, кроме простого столбца, выбирает то, что GraphQL не предоставляет изначально.)

Если сервер исправлен, новы получаете ответ на этот запрос, вы можете самостоятельно рассчитать агрегат на стороне клиента.

Если вы тоже управляете сервером и вам нужны такие агрегаты, вы можете добавить их в схему.Для вашего примера запроса я мог бы добавить слой косвенности между запросом и его результатами.

type Query {
    schneider(where: SchneiderQuery): SchneiderPayload!
}
type SchneiderPayload {
    results: [SchneiderResult!]!
    max: SchneiderResult
    min: SchneiderResult
}

С помощью этой схемы вы можете написать запрос типа

{
    schneider(where: { ... }) {
        max { active_energy_received }
    }
}

в коде вашего серверавам нужно иметь специальный преобразователь для поля max, которое генерирует правильный запрос.

...