Partilhar via


Ordenar resultados no GraphQL (orderBy)

A ordenação define a sequência de registros retornados e sustenta a paginação estável. No GraphQL, o Data API builder (DAB) usa o orderBy argumento para classificar os resultados antes de aplicar first ou after. Se você omitir orderBy, o DAB assume 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 do banco de dados.

Vá para a versão REST deste documento.

Visão geral

Concept Description
Argument orderBy
Valores de direção ASC, DESC
Ordem padrão Chave primária ascendente
Ordem de vários campos Ordenado por ordem de propriedade de objeto declarada
Desempate Campos de chave primária restantes anexados automaticamente

Padrão de utilização

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 da amostra

{
  "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

Aspeto Comportamento
Tipo de entrada Campos escalares enumerados gerados *OrderByInput
Direção enum ASC, DESC
Ordem composta A precedência segue a ordem da declaração
Direção nula Exclui o campo da classificação (title: null)
Campo desconhecido Produz erro de validação do GraphQL

Exemplo ignorando um campo

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

Estruturas inválidas

GraphQL proíbe operadores lógicos (and, or) dentro de 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 }
  }
}

Variáveis

{ "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

Concept REST GraphQL Propósito
Projection $select items Escolha quais campos retornar
Filtering $filter filtrar 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 após Continue a partir da última página usando um cursor

Observação

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