Skip to content

Commit 1ccfc70

Browse files
Add dynamic label and type support in label expressions (#1339)
I wasn't sure how much to add for this feature, it is good to be mentioned, but as we have no central place for dynamic labels and types it makes it tricky to find good places to add it --------- Co-authored-by: Richard Sill <[email protected]>
1 parent 0697dbe commit 1ccfc70

File tree

4 files changed

+102
-0
lines changed

4 files changed

+102
-0
lines changed

modules/ROOT/pages/clauses/filter.adoc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,38 @@ RETURN p.name AS person,
9393
3+|Rows: 2
9494
|===
9595

96+
[[filter-on-dynamic-labels-and-types]]
97+
== Filter on dynamic labels and types
98+
99+
To filter on a label or relationship type using a dynamically computed value, use `$(<expr>)` where <expr> is any Cypher expression:
100+
101+
.Parameters
102+
[source, parameters]
103+
----
104+
{
105+
"label": "Swedish"
106+
}
107+
----
108+
109+
.Filter on a dynamically computed node label
110+
// tag::clauses_where_dynamic[]
111+
[source, cypher]
112+
----
113+
MATCH (n)
114+
FILTER n:$($label)
115+
RETURN labels(n) AS labels
116+
----
117+
// end::clauses_where_dynamic[]
118+
119+
.Result
120+
[role="queryresult",options="header,footer",cols="1*<m"]
121+
|===
122+
| labels
123+
| ["Person", "Swedish"]
124+
1+d|Rows: 1
125+
|===
126+
127+
96128
[[filter-on-dynamic-properties]]
97129
== Filter on dynamic properties
98130

modules/ROOT/pages/clauses/where.adoc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,38 @@ RETURN f.name AS oldFriend
103103
|===
104104

105105

106+
[[filter-on-dynamic-labels-and-types]]
107+
== Filter on dynamic labels and types
108+
109+
To filter on a label or relationship type using a dynamically computed value, use `$(<expr>)` where <expr> is any Cypher expression:
110+
111+
.Parameters
112+
[source, parameters]
113+
----
114+
{
115+
"label": "Swedish"
116+
}
117+
----
118+
119+
.Filter on a dynamically computed node label
120+
// tag::clauses_where_dynamic[]
121+
[source, cypher]
122+
----
123+
MATCH (n)
124+
WHERE n:$($label)
125+
RETURN labels(n) AS labels
126+
----
127+
// end::clauses_where_dynamic[]
128+
129+
.Result
130+
[role="queryresult",options="header,footer",cols="1*<m"]
131+
|===
132+
| labels
133+
| ["Person", "Swedish"]
134+
1+d|Rows: 1
135+
|===
136+
137+
106138
[[filter-on-dynamic-properties]]
107139
== Filter on dynamic properties
108140

modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,31 @@ Cypher 25 was introduced in Neo4j 2025.06 and can only be used on Neo4j 2025.06+
2222
Features removed in Cypher 25 are still available on Neo4j 2025.06+ databases either by prepending a query with `CYPHER 5` or by having Cypher 5 as the default language for the database.
2323
For more information, see xref:queries/select-version.adoc[].
2424

25+
[[cypher-deprecations-additions-removals-2025.07]]
26+
== Neo4j 2025.07
27+
28+
=== Updated in Cypher 25
29+
30+
[cols="2", options="header"]
31+
|===
32+
| Feature
33+
| Details
34+
35+
a|
36+
label:functionality[]
37+
label:updated[]
38+
[source, cypher, role="noheader"]
39+
----
40+
MATCH (n)-[r]->()
41+
WHERE n:$(<expr1>)
42+
WITH n, r:$(<expr2>) AS hasType
43+
RETURN n:$(<expr3>)
44+
----
45+
46+
| Added the ability to dynamically reference node labels and relationship types in places where xref:patterns/reference.adoc#label-expressions[label expressions] are allowed.
47+
|===
48+
49+
2550
[[cypher-deprecations-additions-removals-2025.06]]
2651
== Neo4j 2025.06
2752

modules/ROOT/pages/patterns/reference.adoc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,19 @@ The following matches relationships that have a type that is neither `A` nor `B`
314314
-[:!A&!B]->
315315
----
316316

317+
[[dynamic-label-and-type-expressions]]
318+
=== Dynamic label and type expressions
319+
320+
Node labels and relationship types can be referenced dynamically in expressions, parameters, and variables within label expressions.
321+
322+
.Syntax for creating nodes and relationships dynamically
323+
[source, syntax]
324+
----
325+
dynamicLabelExpression ::= ":$(" + valueExpression ")"
326+
----
327+
328+
The `valueExpression` must evaluate to a `STRING NOT NULL | LIST<STRING NOT NULL> NOT NULL` value.
329+
317330
[[property-key-value-expressions]]
318331
== Property key-value expressions
319332

0 commit comments

Comments
 (0)