Перейти к основному содержимому

Сортировка

Узлы и грани

Для сортировки результатов запросы должны отправляться через поле пути edges.

По умолчанию получаемые массивы данных не отсортированы и передаются в том виде, в каком были найдены в базе данных системы. Такой формат выдачи может быть неудобен для использования, если данных много и с ними нужно работать в определённом порядке. Для этих целей получаемые данные можно отсортировать.


Аргумент сортировки

Для сортировки данных используется аргумент order, принимающий в качестве значения поле, по которому требуется отсортировать полученные объекты, и направление, указываемое одним из двух предзаданных значений:

  • ASC — восходящий порядок
  • DESC — нисходящий порядок

Сортировка доступна только для тех полей, у которых эта возможность явно указана в схеме. Явным указанием считается использование интерфейсами входных значений формата XSortInput, где X — имя интерфейса, данные которого могут быть использованы при сортировке.

Пример схемы

"""
Список вариантов сортировки для интерфейса Instrument
"""
input InstrumentModelSortInput {
basicInformation: BasicInformationSortInput
currencyInformation: CurrencyInformationSortInput
tradingDetails: TradingDetailsSortInput
financialAttributes: FinancialAttributesSortInput
boardInformation: BoardInformationSortInput
additionalInformation: AdditionalInformationSortInput
}

"""
Список вариантов сортировки для поля basicInformation
"""
input BasicInformationSortInput {
symbol: SortEnumType
exchange: SortEnumType
description: SortEnumType
shortName: SortEnumType
type: SortEnumType
market: SortEnumType
}

"""
Список допустимых значений для сортировки
"""
enum SortEnumType {
ASC
DESC
}

Отправка запроса

Сортировка может применяться только по одному полю одновременно. Для получения отсортированного массива данных нужно добавить аргумент order с полем для сортировки и её направлением в качестве значения:

Пример запроса
query Instruments {
instruments(where: { basicInformation: { symbol: { contains: "SBER" } } } order: { basicInformation: { shortName: DESC } } ) {
edges {
node {
basicInformation {
symbol
...
shortName
}
}
}
}
}
Пример ответа
{
"data": {
"instruments": {
"edges": [
{
"node": {
"basicInformation": {
"symbol": "SBERP181224PE360",
...
"shortName": "SR360CX4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP180924PE360",
...
"shortName": "SR360CU4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP190624PE360",
...
"shortName": "SR360CR4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP080524PE360",
...
"shortName": "SR360CQ4B"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP300424PE360",
...
"shortName": "SR360CQ4A"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP150524PE360",
...
"shortName": "SR360CQ4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP181224CE360",
...
"shortName": "SR360CL4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP180924CE360",
...
"shortName": "SR360CI4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP190624CE360",
...
"shortName": "SR360CF4"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP080524CE360",
...
"shortName": "SR360CE4B"
}
}
}
]
}
}
}

Что дальше?