在 GraphQL 中排序結果 (orderBy)

排序會定義傳回記錄的順序,並支援穩定的分頁。 在 GraphQL 中,資料 API 產生器 (DAB) 會在套用 first 或 after之前使用引數來orderBy排序結果。 如果您省略 orderBy,DAB 預設會依主索引鍵 (遞增) 排序。

備註

複合主索引鍵會依其資料庫直欄順序排序。

轉到 本文檔的REST版本。

概觀

概念 Description
Argument orderBy
方向值 ASC、DESC
預設順序 主鍵遞增
多欄位順序 依宣告的物件屬性順序排序
搶七 自動附加的其餘主索引鍵欄位

使用模式

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

概念性 SQL

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

範例回應

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

欄位行為

層面 行為
輸入類型 產生的 *OrderByInput 列舉純量欄位
方向枚舉 ASC、DESC
複合順序 優先順序遵循宣告順序
空方向 從排序中排除欄位 (title: null)
未知欄位 產生 GraphQL 驗證錯誤

忽略欄位的範例

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

無效的結構

GraphQL 禁止andor在 orderBy. 例如,下列項目會產生驗證錯誤:

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

使用變數的範例

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

Variables

{ "dir": "DESC" }

相關配置

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

範例設定

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

另請參閱

概念 REST GraphQL 目標
Projection $select 項目 選擇要傳回的欄位
篩選 $filter 篩選 依條件限制資料列
排序 $orderby orderBy 定義排序順序
頁面大小 $first first 限制每頁的項目數
繼續 $after 後 使用游標從最後一頁繼續

備註

REST 關鍵字會遵循 OData 慣例,以 開 $頭。