Bagikan melalui


Mengurutkan hasil dalam GraphQL (orderBy)

Pengurutan menentukan urutan rekaman yang dikembalikan dan mendasar penomoran halaman yang stabil. Di GraphQL, penyusun API Data (DAB) menggunakan orderBy argumen untuk mengurutkan hasil sebelum menerapkan first atau after. Jika Anda menghilangkan orderBy, DAB default untuk mengurutkan menurut kunci primer (naik).

Nota

Kunci primer komposit diurutkan menurut urutan kolom databasenya.

Buka versi REST dokumen ini.

Gambaran Umum

Konsep Description
Argumen orderBy
Nilai arah ASC, DESC
Urutan default Naik kunci primer
Urutan multi-bidang Diurutkan menurut urutan properti objek yang dideklarasikan
Tie-break Bidang kunci utama yang tersisa ditambahkan secara otomatis

Pola penggunaan

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

SQL Konseptual

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

Contoh tanggapan

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

Perilaku bidang

Aspek Perilaku
Jenis input *OrderByInput Menghasilkan bidang skalar enumerasi
Enum arah ASC, DESC
Urutan komposit Prioritas mengikuti urutan deklarasi
Arah null Mengecualikan bidang dari pengurutan (title: null)
Bidang tidak diketahui Menghasilkan kesalahan validasi GraphQL

Contoh mengabaikan bidang

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

Struktur tidak valid

GraphQL melarang operator logis (and, or) di dalam orderBy. Misalnya, berikut ini menghasilkan kesalahan validasi:

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

Contoh menggunakan variabel

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

Variables

{ "dir": "DESC" }

Konfigurasi yang relevan

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

Konfigurasi contoh

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

Lihat juga

Konsep REST GraphQL Tujuan
Projection $select items Pilih bidang mana yang akan dikembalikan
Penyaringan $filter saringan Membatasi baris menurut kondisi
Pengurutan $orderby orderBy Tentukan urutan pengurutan
Ukuran halaman $first first Membatasi jumlah item per halaman
Kelanjutan $after sesudah Lanjutkan dari halaman terakhir menggunakan kursor

Nota

Kata kunci REST dimulai dengan $, mengikuti konvensi OData.