迁移到 6.0.0

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

此页面列出了从 Neo4j GraphQL 库版本 5.x 到 6.x 的所有重大更改以及如何更新它。

如何更新

要更新您的 Neo4j GraphQL 库,请使用 npm 或您选择的包管理器

npm update @neo4j/graphql

重大更改

以下是版本 5.0.0 到 6.0.0 的所有重大更改的列表。

将 Node.js 最低版本更改为 20.0.0

运行 Neo4j GraphQL 库所需的 Node.js 最低版本现在为 20.0.0。

将 Neo4j 最低版本更改为 5.0.0

运行 Neo4j GraphQL 库所需的 Neo4j 最低版本现在为 5.0.0。

删除非 CDC 订阅

已删除对 Neo4jGraphQLSubscriptionsCDCEngine 以外的订阅引擎的支持。这意味着订阅仅在启用了更改数据捕获 (CDC) 的数据库上有效。以下引擎不再受支持

更改默认订阅引擎

在为 Neo4jGraphQL 设置默认订阅时,现在使用生产就绪的 CDC 引擎 (Neo4jGraphQLSubscriptionsCDCEngine) 而不是以前的默认引擎

new Neo4jGraphQL({
    typeDefs,
    driver,
    features: {
        subscriptions: true
    },
});

这意味着默认订阅现在需要在您的数据库中启用 CDC。

删除关系订阅

订阅操作 *RelationshipCreated*RelationshipDeleted 不再受支持。

例如

subscription MovieRelationshipDeleted {
  movieRelationshipCreated {
    movie {
      title
    }
    createdRelationship {
      actors {
        node {
          name
        }
      }
    }
  }
}

@relationship 中删除已弃用的隐式“some”过滤器

已弃用的没有运算符后缀的隐式“some”过滤器已从 @relationship 中删除,取而代之的是显式的 _SOME 过滤器。

之前 现在
{
  movies(where: { actors: { name: "Keanu" } }) {
    title
  }
}
{
  movies(where: { actors_SOME: { name: "Keanu" } }) {
    title
  }
}

删除聚合过滤器输入中的无效过滤器

在以前的库版本中,用于聚合过滤器的输入包含不依赖于聚合函数的过滤器。这些过滤器在以前的库版本中已弃用,并从模式中删除。

要查看在过滤中支持的聚合函数,请参阅 聚合过滤

删除不使用 _LENGTH 的字符串聚合过滤器

由于字符串聚合是使用长度计算的,因此它们现在需要所有字符串聚合过滤器的 _LENGTH 后缀。

之前 现在
{
  movies(
    where: { actorsAggregate: { node: { name_AVERAGE_EQUAL: 1.5 } } }
  ) {
    title
  }
}
{
  movies(
    where: { actorsAggregate: { node: { name_AVERAGE_LENGTH_EQUAL: 1.5 } } }
  ) {
    title
  }
}

assertIndexesAndConstraints 中删除已弃用的 options 参数

已删除 assertIndexesAndConstraints 实用程序中已弃用的 options 参数。数据库迁移超出了 Neo4j GraphQL 库的范围,所有索引和约束都必须手动管理。

从顶级更新中删除不是 update 的顶级参数

顶级 update 变异现在仅接受 update 参数。

以下嵌套操作已移至 update 参数

  • 创建

  • 删除

  • 连接

  • 断开连接

  • 连接或创建

之前 现在
mutation UpdateActors {
  updateActors(create: { movies: { node: { title: "The Good" } } }) {
    actors {
      name
    }
  }
}
mutation UpdateActors {
  updateActors(
    update: { movies: { create: { node: { title: "The Good" } } } }
  ) {
    actors {
      name
    }
  }
}

更改接口连接字段的 sort 参数

接口连接字段的 sort 参数现在是非空元素列表。

之前 现在
productionsConnection(after: String, first: Int, sort: [ProductionSort], where: ProductionWhere): ProductionsConnection!
productionsConnection(after: String, first: Int, sort: [ProductionSort!], where: ProductionWhere): ProductionsConnection!

已弃用的 _NOT 过滤器不再受支持

以下已弃用的 NOT 过滤器已从模式中删除,因为它们不再受支持

  • _NOT

  • _NOT_CONTAINS

  • _NOT_ENDS_WITH

  • _NOT_IN

  • _NOT_STARTS_WITH

  • _NOT_INCUDES

  • node_NOT

  • edge_NOT

要在 GraphQL 库的 6.x 版本中实现相同的功能,请改用 布尔 NOT 运算符

之前 现在
query {
  movies(where: { title_NOT: "The Matrix" }) {
    title
  }
}
query {
  movies(where: { NOT: { title_EQ: "The Matrix" } }) {
    title
  }
}

@relationship 上已弃用的 _NOT 过滤器不再受支持

以下 @relationship 上已弃用的 _NOT 过滤器已删除且不再受支持

  • actors_NOT

  • actorsConnection_NOT

要在 GraphQL 库的 6.x 版本中实现相同的功能,请使用 NONE 量词。

之前 现在
query {
  movies(where: { actors_NOT: { name_EQ: "Keanu" } }) {
    title
  }
}
query {
  movies(where: { actors_NONE: { name_EQ: "Keanu" } }) {
    title
  }
}

从模式中删除 bookmark 字段

bookmark 字段已从变异 info 响应 (CreateInfoUpdateInfoDeleteInfo) 中删除,因为它不再需要。

更改 Neo4jFeaturesSettings 中的 excludeDeprecatedFields 设置

由于在 6.x 版本中许多已弃用的字段已被删除,因此已修改 excludeDeprecatedFields 设置以反映这些更改。

以下字段已被删除

  • bookmark

  • negationFilters

  • arrayFilters

  • stringAggregation

  • aggregationFilters

  • nestedUpdateOperationsFields

以下字段已添加

  • implicitEqualFilters

  • deprecatedOptionsArgument

  • directedArgument

从 sort 参数中删除一些 @cypher 字段

以下 @cypher 字段类型已从 sort 参数中删除,因为它们不能用作排序字段

  • 具有非空参数的 @cypher 字段。

  • 具有不可排序类型(如 NodeList 等)的 @cypher 字段。

cypherQueryOptions 中删除 connectComponentsPlanner

connectComponentsPlanner 被弃用后,该字段不再在 GraphQL 上下文中被接受,并从 cypherQueryOptions 对象中删除。

新增功能

添加了_EQ 过滤器作为已弃用的隐式等于过滤器的替代方案

count_EQ 过滤器现在可用作已弃用的 count 过滤器的替代方案。

之前 现在
{
  movies(where: { actorsAggregate: { count: 10 } }) {
    title
  }
}
{
  movies(where: { actorsAggregate: { count_EQ: 10 } }) {
    title
  }
}

添加了_EQ 过滤器作为已弃用的隐式“等于”过滤器的替代方案

_EQ 过滤器现在可用作已弃用的隐式“等于”过滤器的替代方案。

之前 现在
{
  movies(where: { title: "The Matrix" }) {
    title
  }
}
{
  movies(where: { title_EQ: "The Matrix" }) {
    title
  }
}

弃用和警告

隐式等值过滤器已弃用

以下隐式等值过滤器已弃用

  • { name: "Keanu" }

  • { count: 10 }

您可以使用{ name_EQ: "Keanu" }{ count_EQ: 10 } 来实现相同的功能。已弃用的等值过滤器将在 7.x 版本中移除。

之前 现在
query {
  users(where: { name: "John" }) {
    id
    name
  }
}
query {
  users(where: { name_EQ: "John" }) {
    id
    name
  }
}

@node 必须显式定义

将来,没有@node 指令的类型将不再被视为 Neo4j 节点。在 6.0.0 版本中,不需要为表示 Neo4j 节点的每个 GraphQL 类型指定 @node 指令,但建议这样做,并且如果未指定则会发出警告。确实存在某些情况下不应使用 @node,例如,对于由 @cypher 字段返回的不是 Neo4j 节点的类型。

之前 现在
type Movie {
    title: String
    actors: [Person!]! @relationship(type: "ACTED_IN", direction: IN)
}

type Person {
    name: String
}
type Movie @node {
    title: String
    actors: [Person!]! @relationship(type: "ACTED_IN", direction: IN)
}

type Person @node {
    name: String
}

已弃用隐式等值过滤器

以前,如果一个字段出现在过滤器中而没有指定运算符,则将其视为等值过滤器。此行为现已弃用,并将在将来移除。请改用_EQ 过滤器。

之前 现在
{
  movies(where: { title: "The Matrix" }) {
    title
  }
}
{
  movies(where: { title_EQ: "The Matrix" }) {
    title
  }
}

已弃用分页 options 参数

查询和 @relationship 字段中的 options 参数已弃用,并将在将来移除。请改用 limitoffsetsort 参数。

之前 现在
{
  movies(options: { limit: 10, offset: 10, sort: { title: ASC } }) {
    title
  }
}
{
  movies(limit: 10, offset: 10, sort: { title: ASC }) {
    title
  }
}

已弃用 @relationship 字段中的 directed 参数

directed 参数用于在查询时更改关系字段的查询方向,例如

{
  movies {
    title
    actors(directed: false) {
      name
    }
  }
}

@relationship 字段中的 directed 参数已弃用,并将在将来移除。请改用 @relationship 指令的 queryDirectiondirection 参数配置查询方向。

已弃用 @relationship.queryDirection_DEFAULT_ONLY 选项

随着 directed 参数的弃用,@relationship.queryDirection 接受的值已更改

  • DEFAULT_DIRECTED 已弃用。

  • DEFAULT_UNDIRECTED 已弃用。

  • DIRECTED_ONLY 重命名为 DIRECTED

  • UNDIRECTED_ONLY 重命名为 UNDIRECTED

如果使用已弃用的值,则会发出警告。