Vue d'ensemble
La clause ab().src().dest().depth()
récupère les chemins entre un seul node source et un seul node de destination.
Syntaxe
Alias de la Clause: Type PATH
Méthode |
Type Paramètre |
Spécification Paramètre |
Requis |
Description | Alias |
---|---|---|---|---|---|
src() |
Filtre | / | Oui | Les conditions du seul node source ; une erreur se produit si plusieurs nodes sont spécifiés | NODE |
dest() |
Filtre | / | Oui | Les conditions du seul node de destination ; une erreur se produit si plusieurs nodes sont spécifiés | NODE |
depth() |
Intervalle | / | Oui | Profondeur des chemins (N≥1):depth(N) : N edgesdepth(:N) : 1~N edgesdepth(M:N) : M~N edges (M≥0) |
N/A |
shortest() |
/ ou @<schema>.<property> |
Propriété d'edge numérique évaluée en LTE | Non | Retourne le chemin le plus court (pondéré). Lorsqu'une propriété d'edge (avec des valeurs non négatives) est spécifiée, les edges sans cette propriété ne seront pas pris en compte La méthode shortest() ne supporte que depth(N) , indiquant les chemins les plus courts (pondérés) en N étapes |
N/A |
node_filter() |
Filtre | / | Non | Les conditions que tous les nodes intermédiaires dans les chemins doivent satisfaire | N/A |
edge_filter() |
Filtre | / | Non | Les conditions que tous les edges dans les chemins doivent satisfaire | N/A |
path_ascend() |
@<schema>.<property> |
Propriété d'edge numérique évaluée en LTE | Non | Retourne les chemins où les valeurs de la propriété spécifiée montent de la source à la destination (les edges sans la propriété ne seront pas pris en compte) | N/A |
path_descend() |
@<schema>.<property> |
Propriété d'edge numérique évaluée en LTE | Non | Retourne les chemins où les valeurs de la propriété spécifiée descendent de la source à la destination (les edges sans la propriété ne seront pas pris en compte) | N/A |
direction() |
Chaîne | left , right |
Non | Direction de tous les edges dans les chemins | N/A |
no_circle() |
/ | / | Non | Les chemins avec des cercles ne seront pas retournés Exception : Lorsque src() et dest() spécifient le même node et que ce node n'apparaît pas en position intermédiaire, le chemin sera quand même retourné |
N/A |
limit() |
Entier | ≥-1 | Non | Nombre de résultats à retourner pour chaque sous-requête, -1 signifie tout retourner |
N/A |
Exemples
Exemple de Graph
Exécutez ces UQLs ligne par ligne dans un graphset vide pour créer ce graph :
create().edge_property(@default, "weight", int32)
insert().into(@default).nodes([{_id:"A", _uuid:1}, {_id:"B", _uuid:2}, {_id:"C", _uuid:3}, {_id:"D", _uuid:4}, {_id:"E", _uuid:5}, {_id:"F", _uuid:6}])
insert().into(@default).edges([{_uuid:1, _from_uuid:1, _to_uuid:3, weight:1}, {_uuid:2, _from_uuid:5, _to_uuid:2 , weight:1}, {_uuid:3, _from_uuid:1, _to_uuid:5 , weight:4}, {_uuid:4, _from_uuid:4, _to_uuid:3 , weight:2}, {_uuid:5, _from_uuid:5, _to_uuid:4 , weight:3}, {_uuid:6, _from_uuid:2, _to_uuid:1 , weight:2}, {_uuid:7, _from_uuid:6, _to_uuid:1 , weight:4}])
Filtrer la Profondeur
Exemple : Trouver des chemins de 3 étapes de A à E, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(3) as p
return p{*}
A --1--> C <--4-- D <--5-- E
Exemple : Trouver des chemins de 1 à 3 étapes de A à E, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3) as p
return p{*}
A --3--> E
A --1--> C <--4-- D <--5-- E
A <--6-- B <--2-- E
Exemple : Trouver des chemins de 2 à 3 étapes de A à E, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(2:3) as p
return p{*}
A --1--> C <--4-- D <--5-- E
A <--6-- B <-2-- E
Chemin le plus court non pondéré
Exemple : Trouver les chemins les plus courts de A à E en 3 étapes, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(3)
.shortest() as p
return p{*}
A --3--> E
Chemin le plus court pondéré
Exemple : Trouver les chemins les plus courts de A à E en 3 étapes, utiliser @default.weight comme poids, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(3)
.shortest(@default.weight) as p
return p{*}
A <--6-- B <--2-- E
Analyse: La Porperty @default.weight doit être chargée dans le moteur (LTE).
Filtrer les Nodes Intermédiaires
Exemple : Trouver des chemins de 1 à 3 étapes de A à E sans passer par D, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.node_filter({_id != "D"}) as p
return p{*}
A --3--> E
A <--6-- B <--2-- E
Filtrer les Edges
Exemple : Trouver des chemins de 1 à 3 étapes de A à E où le weight de l'edge est supérieur à 1, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.edge_filter({weight > 1}) as p
return p{*}
A --3--> E
Propriété d'Edge Ascendante/Descendante
Exemple : Trouver des chemins de 1 à 3 étapes de A à E avec la propriété @default.weight ascendante le long du chemin, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.path_ascend(@default.weight) as p
return p{*}
A --3--> E
A --1--> C <--4-- D <--5-- E
Analyse: La Porperty @default.weight doit être chargée dans le moteur (LTE).
Exemple : Trouver des chemins de 1 à 3 étapes de A à E avec la propriété @default.weight descendante le long du chemin, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.path_descend(@default.weight) as p
return p{*}
A --3--> E
A <--6-- B <--2-- E
Analyse: La Porperty @default.weight doit être chargée dans le moteur (LTE).
Filtrer la Direction des Edges
Exemple : Trouver des chemins de 1 à 3 étapes de A à E avec tous les edges pointant à droite, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.direction(right) as p
return p{*}
A --3--> E
Exemple : Trouver des chemins de 1 à 3 étapes de A à E avec tous les edges pointant à gauche, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3)
.direction(left) as p
return p{*}
A <--6-- B <--2-- E
Filtrer les Cercles
Exemple : Trouver des chemins de 4 étapes de A à E qui ne contiennent pas de cercle, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "C"}).depth(4).no_circle() as p
return p{*}
A <--6-- B <--2-- E --3--> D --4--> C
Analyse: Les chemins avec des cercles seront retournés si no_circle()
n'est pas utilisé :
A --3--> E --2--> B --6--> A --1--> C
A <--6-- B <--2-- E --3--> D --4--> C
A <--6-- B <--2-- E <--3-- A --1--> C
limit()
Exemple : Trouver un chemin de 1 à 3 étapes de A à E, transporter toutes les propriétés
ab().src({_id == "A"}).dest({_id == "E"}).depth(:3).limit(1) as p
return p{*}
A <--6-- B <--2-- E