J'ai un problème suivant: Je veux sélectionner les noeuds de chemins avec le type A. Mais je ne veux pas tous les chemins, seulement ceux avec des propriétés spécifiques. Le problème est que, dans notre datamodel, ces propriétés sont stockées dans un nœud distinct de type AD. Pour le début et la fin, tout fonctionne bien. Et je pense que j'ai également travaillé sur la structure générale car cette requête fonctionne parfaitement.Sélectionner les chemins en fonction des informations des noeuds liés
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD0'
WITH n AS start
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD3'
WITH n AS end, start
MATCH p = (start) -[:L*0..10]-> (end)
WHERE ALL (x in nodes(p) [1..-1] WHERE ((x.name STARTS WITH 'ad1' OR x.name STARTS WITH 'ad2')))
return p
Le problème est ici, que je reçois la propriété pour les noeuds intermédiaires sur des noeuds de type A, qui ne sera pas pe possible dans notre modèle final. Pour tester, j'ai ajouté une propriété à A contenant les informations normalement stockées dans AD. Le résultat ne doit contenir que des nœuds de type A liés à des nœuds de type AD et AD.name doit être AD0 ... AD3, mais je souhaite exclure des nœuds de type A liés à des nœuds AD avec AD.name = ' AD4 'par exemple. Pour cela, j'ai essayé la requête suivante, mais elle ne renvoie que le chemin contenant les nœuds A liés aux nœuds AD avec AD.name = AD0 ou AD3.
MATCH (n:A)-->(ad:AD WHERE ad.name='AD0'
WITH n AS start
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD3'
WITH n AS end, start
MATCH (n:AD) WITH n AS ad, end, start //somehow needed otherwise I cannot use AD in the where clause
MATCH p = (start) -[:L*0..]-> (end)
WHERE ALL (
x in nodes(p) [1..-1] WHERE (
((x)-->(ad:AD))
AND
(ad.name ='AD1' OR ad.name='AD2')
)
)
return p
Toute idée pourquoi les chemins ne contenant que des nœuds de type A liés à des noeuds de type AD avec AD.name = AD1 ou AD2 ne sont pas retournés?
Première chose: dans la ligne 'MATCH (n: AD) avec n ad, éviers, sources' vous ne passe pas' 'start' et end' au prochain contexte . Je crois que vous devriez changer cette ligne à 'MATCH (n: AD) avec n AS annonce, puits, sources, début, fin' et essayez à nouveau. –
désolé, il y avait un mélange, sources de puits sont commencent fin maintenant, a corrigé le code ci-dessus – birnenpfluecker