Releases: neo4j/graphql
@neo4j/[email protected]
Important
This is an important patch release which ensures compatibility with the upcoming Neo4j 2025 release. Before you upgrade to Neo4j 2025, please ensure that you have applied this patch upgrade.
Minor Changes
-
#5934
c666adc
Thanks @MacondoExpress! - Introduced thetypename
filter that superseded thetypename_IN
filter.
As part of the change, the flagtypename_IN
has been added to theexcludeDeprecatedFields
setting.const neoSchema = new Neo4jGraphQL({ typeDefs, features: { excludeDeprecatedFields: { typename_IN: true } }, });
Patch Changes
-
#5937
7f1bc65
Thanks @MacondoExpress! - Aggregations on ID fields are now deprecated.
As part of the change, the flagidAggregations
has been added to theexcludeDeprecatedFields
setting.const neoSchema = new Neo4jGraphQL({ typeDefs, features: { excludeDeprecatedFields: { idAggregations: true } }, });
-
#5943
6153d68
Thanks @darrellwarde! - Fix Cypher when filtering by aggregations over different relationship properties types -
#5953
ebbb921
Thanks @angrykoala! - Add support for CalVer editions of neo4j
@neo4j/[email protected]
Important
This is an important patch release which ensures compatibility with the upcoming Neo4j 2025 release. Before you upgrade to Neo4j 2025, please ensure that you have applied this patch upgrade.
Patch Changes
- #5954
dbd5e40
Thanks @angrykoala! - Add support for CalVer editions of neo4j
@neo4j/[email protected]
Important
This is an important patch release which ensures compatibility with the upcoming Neo4j 2025 release. Before you upgrade to Neo4j 2025, please ensure that you have applied this patch upgrade.
Patch Changes
- Updated dependencies [
dbd5e40
]:- @neo4j/graphql@5.11.4
@neo4j/[email protected]
Important
This is an important patch release which ensures compatibility with the upcoming Neo4j 2025 release. Before you upgrade to Neo4j 2025, please ensure that you have applied this patch upgrade.
Major Changes
-
#5936
d48ea32
Thanks @mjfwebb! - Changes the result projection where there are multiple relationships between two nodes.In the case of using the connection API then multiple relationships will still be represented, as there is the ability to select the relationship properties. In the non-connection API case, the duplicate results will only return distinct results.
-
#5931
5ce7d1d
Thanks @darrellwarde! -DateTime
andTime
values are now converted from strings into temporal types in the generated Cypher instead of in server code using the driver. This could result in different values when the database is in a different timezone to the GraphQL server. -
#5933
8bdcf6b
Thanks @mjfwebb! - When performing aconnect
operation, new relationships are always created.
@neo4j/[email protected]
Major Changes
-
#5927
530d8cd
Thanks @MacondoExpress! - Thetypename_IN
filter has been renamed totypename
. -
#5898
a912404
Thanks @MacondoExpress! - Aggregations are no longer generated forID
fields.
Minor Changes
-
#5868
46ab2fa
Thanks @angrykoala! - Add suport for generic update operators:mutation { updateMovies(update: { name: { set: "The Matrix" } }) { movies { id name } } }
-
#5873
17911fc
Thanks @MacondoExpress! - Introduce a new style for filtering relationships and connections.
The quantifiersSOME
|NONE
|SINGLE
|ALL
are now available as a nested input object.Relationship
{ movies(where: { genres: { some: { name: { equals: "some genre" } } } }) { actorCount } }
Connection
{ movies(where: { genresConnection: { some: { node: { name: { equals: "some genre" } } } } }) { actorCount } }
Patch Changes
-
#5871
722c650
Thanks @angrykoala! - Deprecate individual mutations in favor of generic mutations_SET
_POP
_PUSH
_INCREMENT
_ADD
_DECREMENT
_SUBTRACT
_MULTIPLY
_DIVIDE
-
#5882
7254acf
Thanks @angrykoala! - Deprecates old aggregation filters for relationships in favor of more generic filters:Before:
query Movies { movies( where: { actorsAggregate: { node: { lastRating_AVERAGE_GT: 6 } } } ) { title } }
Now:
query Movies { movies( where: { actorsAggregate: { node: { lastRating: { average: { gt: 6 } } } } } ) { title } }
-
#5897
4f3b068
Thanks @MacondoExpress! - Deprecate relationship filtering using the non-generic version such asactors_SOME: { title_EQ: "The Matrix" }
in favor of the generic inputactors: { some: { title: { eq: "The Matrix" } } }
.
The settingexcludeDeprecatedFields
now contains the optionrelationshipFilters
to remove these deprecated filters. -
#5897
917482b
Thanks @MacondoExpress! - Deprecate attribute filtering using the non-generic version such astitle_EQ: "The Matrix"
in favor of the generic inputtitle: { eq: "The Matrix" }
.
The settingexcludeDeprecatedFields
now contains the optionattributeFilters
to remove these deprecated filters. -
#5879
5c7ba22
Thanks @angrykoala! - Add generic filters for aggregations:{ posts(where: { likesAggregate: { node: { rating: { average: { eq: 3.2 } } } } }) { title } }
-
#5882
7254acf
Thanks @angrykoala! - Introduce the flag "aggregationFilters" to remove deprecated aggregation filters:const neoSchema = new Neo4jGraphQL({ typeDefs, features: { excludeDeprecatedFields: { aggregationFilters: true } }, });
@neo4j/[email protected]
@neo4j/[email protected]
@neo4j/[email protected]
Patch Changes
- Updated dependencies [
f7358d0
,06478b8
]:- @neo4j/graphql@5.11.3
@neo4j/[email protected]
Major Changes
- #5789
1a07d40
Thanks @darrellwarde! - The Neo4j GraphQL Library and Introspector now required Node.js 22 or greater.
Patch Changes
- #5837
721691a
Thanks @MacondoExpress! - Changed how "@neo4j/introspector" generates list fields that now are generated as a list of non-nullable elements, as a list of nullable elements is not supported by Neo4j.
@neo4j/[email protected]
Major Changes
-
#5899
7335d8f
Thanks @darrellwarde! - Nested mutation operations now follow the relationship direction behaviour as defined inqueryDirection
-
#5872
925ad8d
Thanks @angrykoala! - Remove@private
directive. This directive was intended to be used with the library@neo4j/graphql-ogm
which is no longer supported. -
#5895
6afcadd
Thanks @angrykoala! - Fails schema generation if there are conflicting plural names in types. For example, the following schema will fail, due to ambiguousTechs
pluraltype Tech @node(plural: "Techs") { name: String } type Techs { value: String }
-
#5755
9c75f92
Thanks @angrykoala! - Remove support forconnectOrCreate
operations -
#5778
56022ba
Thanks @darrellwarde! - The deprecateddirected
argument has been removed, andqueryDirection
now only accepts two possible values -DIRECTED
(default) andUNDIRECTED
.Additionally, the
directedArgument
setting ofexcludeDeprecatedFields
has been removed as these deprecated fields have been removed. -
#5819
ac1fa62
Thanks @angrykoala! - Single element relationships have been removed in favor of list relationships:Before
type Movie { director: Person @relationship(type: "DIRECTED", direction: "IN") }
After
type Movie { director: [Person!]! @relationship(type: "DIRECTED", direction: "IN") }
This requires updating filters, clients and auth rules to use the list filter operations.
Single element relationships cannot be reliably enforced, leading to a data inconsistent with the schema. If the GraphQL model requires 1-1 relationships (such as in federations) these can now be achieved with the
@cypher
directive instead:type Movie { director: Person @cypher( statement: """ MATCH(this)-[:ACTED_IN]->(p:Person) RETURN p """ columnName: "p" ) }
-
#5762
87e416b
Thanks @darrellwarde! - There have been major changes to the way that full-text search operates.The directive now requires the specification of an index name, query name, and indexed fields.
input FulltextInput { indexName: String! queryName: String! fields: [String]! } """ Informs @neo4j/graphql that there should be a fulltext index in the database, allows users to search by the index in the generated schema. """ directive @fulltext(indexes: [FulltextInput]!) on OBJECT
Here is an example of how this might be used:
type Movie @node @fulltext(indexName: "movieTitleIndex", queryName: "moviesByTitle", fields: ["title"]) { title: String! }
Full-text search was previously available in two different locations.
The following form has now been completely removed:
# Removed { movies(fulltext: { movieTitleIndex: { phrase: "The Matrix" } }) { title } }
The following form as a root-level query has been changed:
# Old query query { moviesByTitle(phrase: "The Matrix") { score movies { title } } } # New query query { moviesByTitle(phrase: "The Matrix") { edges { score node { title } } } }
The new form is as a Relay connection, which allows for pagination using cursors and access to the
pageInfo
field. -
#5820
d8d59f8
Thanks @MacondoExpress! - Change the way how@node
behaves,@node
is now required, and GraphQL Object types without the directive@node
will no longer considered as a Neo4j Nodes representation.
Queries and Mutations will be generated only for types with the@node
directive. -
#5801
95ce8bb
Thanks @darrellwarde! - Implicit filtering fields have been removed, please use the explicit versions:# Old syntax { movies(where: { title: "The Matrix" }) { title } } # New syntax { movies(where: { title_EQ: "The Matrix" }) { title } }
The
implicitEqualFilters
option ofexcludeDeprecatedFields
has been removed. -
#5755
9c75f92
Thanks @angrykoala! - Remove support for@unique
directive -
#5768
e338590
Thanks @angrykoala! - Removeoverwrite
field in connect operations -
#5777
0ecfd71
Thanks @darrellwarde! - The deprecatedoptions
argument has been removed.Consider the following type definitions:
type Movie { title: String! }
The migration is as below:
# Old syntax { movies(options: { first: 10, offset: 10, sort: [{ title: ASC }] }) { title } } # New syntax { movies(first: 10, offset: 10, sort: [{ title: ASC }]) { title } }
The
deprecatedOptionsArgument
ofexcludeDeprecatedFields
has been removed as it is now a no-op. -
#5802
99cb9aa
Thanks @darrellwarde! - Implicit set operations have been removed. For example:# Old syntax mutation { updateMovies(where: { title_EQ: "Matrix" }, update: { title: "The Matrix" }) { movies { title } } } # New syntax mutation { updateMovies(where: { title_EQ: "Matrix" }, update: { title_SET: "The Matrix" }) { movies { title } } }
The
implicitSet
argument ofexcludeDeprecatedFields
has been removed. -
#5789
1a07d40
Thanks @darrellwarde! - The Neo4j GraphQL Library and Introspector now required Node.js 22 or greater.
Patch Changes
- #5837
721691a
Thanks @MacondoExpress! - Added a validation rule to avoid defining fields as lists of nullable elements, as Neo4j does not support this.