Vue d’ensemble
Un modèle de graph est pour correspondre à une liste de modèles de paths dans le graph et est composé de trois parties successives :
- Mode d'Appariement (Optionnel)
- Liste des Modèles de Paths
- Clause WHERE du Modèle de Graph (Optionnel)
<graph pattern> ::=
[ <match mode> ] <path pattern list> [ <graph pattern where clause> ]
<path pattern list> ::= <path pattern> [ { "," <path pattern> }... ]
La liste des modèles de paths se compose d'un ou plusieurs modèles de paths, permettant la construction de modèles plus complexes qui ne peuvent pas être exprimés par un seul modèle de path.
Chaque modèle de path est indépendamment apparé contre le graph, produisant un ensemble de paths. Ces ensembles sont soit reliés par égalité sur les variables communes (si elles existent) soit combinés en utilisant le produit cartésien.
Example Graph
Les exemples suivants s'exécutent sur ce graph :
Pour créer ce graph, exécutez la requête suivante contre un graph vide :
INSERT (brainy:User {_id: "U01", name: "Brainy"}),
(rowlock:User {_id: "U02", name: "rowlock"}),
(purplechalk:User {_id: "U03", name: "purplechalk"}),
(quickfox:User {_id: "U04", name: "QuickFox"}),
(quasar92:User {_id: "U05", name: "Quasar92"}),
(mochaeach:User {_id: "U06", name: "mochaeach"}),
(london:City {_id: "C01", name: "London"}),
(newyork:City {_id: "C02", name: "New York"}),
(rowlock)-[:Follows]->(brainy),
(purplechalk)-[:Follows]->(brainy),
(quickfox)-[:Follows]->(brainy),
(rowlock)-[:Follows]->(mochaeach),
(purplechalk)-[:Follows]->(mochaeach),
(quickfox)-[:Follows]->(mochaeach),
(quasar92)-[:Follows]->(mochaeach),
(quickfox)-[:LivesIn]->(london),
(rowlock)-[:LivesIn]->(newyork),
(purplechalk)-[:LivesIn]->(newyork)
Connected Paths
Pour obtenir des suiveurs communs de Brany
et mochaeach
qui vivent à New York
:
MATCH (:User {name: 'Brainy'})<-[:Follows]-(u:User)-[:Follows]->(:User {name: 'mochaeach'}),
(u)-[:LivesIn]->(:City {name: 'New York'})
RETURN u.name
Les deux modèles de paths ont une variable commune u
, donc une jonction par égalité est effectuée :
Résultat :
u.name |
---|
rowlock |
purplechalk |
Disconnected Paths
Ce modèle de graph trouve les utilisateurs qui suivent Brainy
et les utilisateurs qui vivent à New York
:
MATCH (u1:User)-[:Follows]->(:User {name: 'Brainy'}),
(u2:User)-[:LivesIn]->(:City {name: 'New York'})
RETURN u1.name, u2.name
Les deux modèles de paths n'ont aucune variable commune, donc le produit cartésien est effectué :
Résultat :
u1.name | u2.name |
---|---|
rowlock | rowlock |
rowlock | purplechalk |
purplechalk | rowlock |
purplechalk | purplechalk |
QuickFox | rowlock |
QuickFox | purplechalk |
Modes de MATCH
Cette fonctionnalité n'est pas encore supportée.
Un modèle de graph peut spécifier optionnellement un mode d'appariement qui s'applique à tous les modèles de paths contenus dans le modèle de graph.
Il existe deux modes d'appariement :
DIFFERENT EDGES
: Une edge appariée n'est pas autorisée à se lier à plus d'une variable d'edge. Il n'y a pas de restrictions sur les nodes appariés.REPEATABLE ELEMENTS
: Il n'y a pas de restrictions sur les edges appariés ou les nodes appariés. Ceci est implicite lorsqu'aucun mode d'appariement n'est spécifié.
<match mode> ::=
<repeatable elements match mode> | <different edges match mode>
<repeatable elements match mode> ::= "REPEATABLE ELEMENTS"
<different edges match mode> ::= "DIFFERENT EDGES"
Cette requête trouve les nodes connectés à U01
, mais qui ont également des connexions avec d'autres nodes en dehors de U01
:
MATCH DIFFERENT EDGES (:User {name: "QuickFox"})-[e1]-(n), (n)-[e2]-(m)
RETURN DISTINCT n
Les enregistrements qui garantissent que les edges sont liés de manière unique à des variables différentes sont conservés. Par conséquent, seuls les nodes U03
et C01
sont retournés.
Si le mode d'appariement est DIFFERENT EDGES
et si une variable d'edge a été déclarée plusieurs fois dans un modèle de graph, alors aucun résultat n'est retourné. Voir les deux exemples suivants :
MATCH DIFFERENT EDGES ()-[e]->(), ()-[e]->()
RETURN e
MATCH DIFFERENT EDGES ()-[e]->()-[e]->()
RETURN e