Compartilhar via


Ordenando resultados no GraphQL (orderBy)

A ordenação define a sequência de registros retornados e sustenta a paginação estável. No GraphQL, o DAB (Construtor de API de Dados) usa o orderBy argumento para classificar os resultados antes de first aplicar ou after. Se você omitir orderBy, o DAB usará como padrão a classificação pela chave primária (crescente).

Observação

As chaves primárias compostas são ordenadas pela sequência de colunas de banco de dados.

Vá para a versão REST deste documento.

Visão geral

Conceito Description
Argument orderBy
Valores de direção ASC, DESC
Ordem padrão Chave primária crescente
Ordem de vários campos Ordenado por ordem de propriedade de objeto declarada
Tie-break Campos de chave primária restantes acrescentados automaticamente

Padrão de uso

query {
  books(orderBy: { year: DESC, title: ASC }, first: 5) {
    items {
      id
      title
      year
    }
  }
}

SQL conceitual

SELECT TOP (5)
  id,
  sku_title AS title,
  year
FROM dbo.books
ORDER BY year DESC, sku_title ASC, id ASC;

Resposta de exemplo

{
  "data": {
    "books": {
      "items": [
        { "id": 7, "title": "Dune Messiah", "year": 1969 },
        { "id": 6, "title": "Dune", "year": 1965 },
        { "id": 3, "title": "Foundation", "year": 1951 },
        { "id": 1, "title": "I, Robot", "year": 1950 },
        { "id": 8, "title": "The Martian Chronicles", "year": 1950 }
      ]
    }
  }
}

Comportamento de campo

Aspecto Comportamento
Tipo de entrada Geração *OrderByInput de campos escalares de enumeração
Enumeração de direção ASC, DESC
Ordem composta Precedência segue ordem de declaração
Direção nula Exclui o campo da classificação (title: null)
Campo desconhecido Produz um erro de validação do GraphQL

Exemplo ignorando um campo

query {
  books(orderBy: { title: null, id: DESC }) {
    items { id title }
  }
}

Estruturas inválidas

O GraphQL proíbe operadores lógicos (and, or) dentro orderBy. Por exemplo, o seguinte produz um erro de validação:

books(orderBy: { or: { id: ASC } })

Exemplo usando uma variável

query ($dir: OrderBy) {
  books(orderBy: { id: $dir }, first: 4) {
    items { id title }
  }
}

Variables

{ "dir": "DESC" }

Configuração relevante

{
  "entities": {
    "Book": {
      "source": {
        "object": "dbo.books",
        "type": "table"
      },
      "mappings": {
        "sku_title": "title"
      }
    }
  }
}

Configuração de exemplo

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Consulte também

Conceito REST GraphQL Propósito
Projection $select items Escolher quais campos retornar
Filtragem $filter filtro Restringir linhas por condição
Classificação $orderby orderBy Definir a ordem de classificação
Tamanho da página $first first Limitar o número de itens por página
Continuação $after depois Continuar da última página usando um cursor

Observação

As palavras-chave REST começam com $, seguindo as convenções OData.