Vue d’ensemble
L'instruction NEXT
vous permet de chaîner plusieurs instructions pour composer une instruction linéaire avancée.
La requête contenant l'instruction NEXT
ne retourne que la table finale construite par la dernière RETURN
instruction.
<next statement> ::= "NEXT" [ <yield clause> ] <statement>
<statement> ::= <linear data-accessing statement> | <composite query statement>
<linear data-accessing statement> ::=
<simple linear data-accessing statement> <result statement>
<simple linear data-accessing statement> ::= <simple data-accessing statement>...
<simple data-accessing statement> ::=
<insert statement>
| <set statement>
| <remove statement>
| <delete statement>
| <match statement>
| <filter statement>
| <let statement>
| <for statement>
| <order by statement>
| <limit statement>
| <skip statement>
| <call statement>
<result statement> ::=
<return statement> [ <order by statement> ] [ <skip statement> ] [ <limit statement> ]
Détails
- Il doit y avoir une
RETURN
instruction avantNEXT
pour transmettre les variables qui peuvent être référencées dans les instructions suivantes aprèsNEXT
. - La clause
YIELD
peut être utilisée pour sélectionner et renommer les variables afin de les exposer dans les parties suivantes de la requête.
Exemple de Graph
Les exemples suivants s’exécutent sur ce graph :
Pour créer ce graph, exécutez la requête suivante sur un graph vide :
INSERT (rowlock:User {_id: 'U01', name: 'rowlock'}),
(brainy:User {_id: 'U02', name: 'Brainy'}),
(purplechalk:User {_id: 'U03', name: 'purplechalk'}),
(mochaeach:User {_id: 'U04', name: 'mochaeach'}),
(lionbower:User {_id: 'U05', name: 'lionbower'}),
(c01:Club {_id: 'C01'}),
(c02:Club {_id: 'C02'}),
(rowlock)-[:Follows]->(brainy),
(mochaeach)-[:Follows]->(brainy),
(purplechalk)-[:Follows]->(mochaeach),
(purplechalk)-[:Follows]->(lionbower),
(brainy)-[:Joins {memberNo: 1}]->(c01),
(lionbower)-[:Joins {memberNo: 2}]->(c01),
(mochaeach)-[:Joins {memberNo: 9}]->(c02)
Utilisation Courante
Cette requête retourne les utilisateurs qui sont suivis par U03
tout en étant également membres de C01
:
MATCH ({_id: "C01"})<-[:Joins]-(u1:User)
RETURN u1
NEXT
MATCH ({_id: "U03"})-[:Follows]->(u2:User)
WHERE u2 = u1
RETURN u2
Résultat: u2
\_id | \_uuid | schema | values |
---|---|---|---|
U05 | Sys-gen | User | {name: "lionbower"} |
Utilisation de Résultat Groupé
Cette requête retourne les noms des utilisateurs ayant rejoint le club avec le nombre maximum de membres :
MATCH (c:Club)<-[:Joins]-()
RETURN c, count(c) AS cnt GROUP BY c
ORDER BY cnt DESC LIMIT 1
NEXT
MATCH (c)<-[:Joins]-(u)
RETURN collect_list(u.name)
Résultat:
collect_list(u.name) |
---|
["Brainy","lionbower"] |
Utilisation de Résultat Agrégé
Cette requête insère une nouvelle arête Joins
de U01
à C01
et définit la propriété memberNo
à la valeur supérieure suivante :
MATCH ({_id: "C01"})<-[e1:Joins]-()
RETURN max(e1.memberNo) AS maxNo
NEXT
MATCH (u {_id: "U01"}), (c {_id: "C01"})
INSERT (c)<-[e2:Joins {memberNo: maxNo + 1}]-(u)
RETURN e2
Résultat: e2
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | U01 | C01 | UUID of U01 | UUID of C01 | Joins | {memberNo: 3} |
NEXT YIELD
Cette requête trouve les clubs rejoints par les utilisateurs suivis par l'utilisateur purplechalk
:
LET name = "purplechalk"
MATCH (:User {name: name})-[:Follows]->(u:User)
RETURN *
NEXT YIELD u
MATCH (u)-[:Joins]->(c:Club)
RETURN collect_list(c._id)
Résultat:
collect_list(c) |
---|
["C01","C02"] |