类型配置

这是 GraphQL 库版本 6 的文档。对于长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS

在表示 Neo4j 节点时,GraphQL 对象类型在查询、变异和订阅类型中生成多个操作字段。例如

type Movie @node {
    title: String
    length: Int
}

从这些类型定义中,库生成以下操作字段

查询:

  • movies

  • moviesAggregate

  • moviesConnection

变异:

  • createMovies

  • deleteMovies

  • updateMovies

订阅:

  • movieCreated

  • movieUpdated

  • movieDeleted .

此页面介绍如何使用指令 @query@mutation@subscription 减少生成的操纵字段。

@query

此指令用于限制库中查询操作的可用性。

定义

directive @query(read: Boolean! = true, aggregate: Boolean! = false) on OBJECT | SCHEMA | INTERFACE | UNION

用法

禁用 moviesmoviesConnection 操作
type Movie @node @query(read: false, aggregate: true) {
    title: String
    length: Int
}
禁用 moviesAggregate 操作
type Movie @node @query(read: true, aggregate: false)  {
    title: String
    length: Int
}

@mutation

此指令用于限制库中变异操作的可用性。

定义

enum MutationFields {
    CREATE
    UPDATE
    DELETE
}

directive @mutation(operations: [MutationFields!]! = [CREATE, UPDATE, DELETE]) on OBJECT | SCHEMA

用法

禁用 Movie 的创建、删除和更新操作
type Movie @node @mutation(operations: []) {
    title: String
    length: Int
}
仅启用 Movie 的创建操作
type Movie @node @mutation(operations: [CREATE]) {
    title: String
    length: Int
}

@subscription

此指令用于限制库中的订阅操作。

定义

enum SubscriptionFields {
    CREATED
    UPDATED
    DELETED
}

directive @subscription(events: [SubscriptionFields!]! = [CREATED, UPDATED, DELETE]) on OBJECT | SCHEMA

用法

禁用 Movie 的订阅
type Movie @node @subscription(events: [])  {
    title: String
    length: Int
}
仅启用 MoviemovieCreated 订阅
type Movie @node @subscription(events: [CREATED]) {
    title: String
    length: Int
}

@default

在为 create 变异生成输入类型时,此指令中指定的值用作该字段的默认值。

定义

"""Int | Float | String | Boolean | ID | DateTime | Enum"""
scalar Scalar

"""Instructs @neo4j/graphql to set the specified value as the default value in the CreateInput type for the object type in which this directive is used."""
directive @default(
    """The default value to use. Must be a scalar type and must match the type of the field with which this directive decorates."""
    value: Scalar!,
) on FIELD_DEFINITION

用法

@default 可与枚举一起使用。在设置枚举字段的默认值时,它必须是枚举的枚举值之一

enum Location {
    HERE
    THERE
    EVERYWHERE
}

type SomeType @node {
    firstLocation: Location! @default(value: HERE) # valid usage
    secondLocation: Location! @default(value: ELSEWHERE) # invalid usage, will throw an error
}

@plural

此指令重新定义了如何为生成的运算组合类型的复数形式。这对于复数形式不正确或是非英语单词的类型特别有用。以这个类型定义为例

type Tech @plural(value: "Techs") @node {
  name: String
}

这样,类型就正确地写成了 techs,而不是错误生成的 teches

{
  techs {
    title
  }
}

同样的规则也适用于其他操作,例如 createTechs。但是,请记住,此指令不会更改数据库标签。