J'exécute une requête qui ressemble à ceci
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, relationships(p) AS re
RETURN *
Je veux filtrer le graphique pour supprimer toutes les instances où une RELB
(une arête entre deux NODEB
) ne possède pas une propriété spécifique avant de revenir.
La requête fonctionne si je lie la relation à l'aide des éléments suivants [rels:RELB*]
et filtrer sur rels
mais je reçois un message disant que cette fonction est obsolète et qu'il faut utiliser la méthode suivante WITH *, relationships(p)
à la place. Le message spécifique est
Cette fonctionnalité est obsolète et sera supprimée dans les prochaines versions. Lier des relations à une liste dans un modèle de longueur variable est déprécié. (La liaison d'un modèle de relation de longueur variable à une variable ('rels') est dépréciée et ne sera pas prise en charge dans une future version. La méthode recommandée est de lier le chemin entier à une variable, puis d'extraire les relations : MATCH p = (...)-[...]-(...) WITH *, relationships(p) AS rels)
J'ai essayé
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, relationships(p) AS re
WHERE ANY (thing IN re WHERE thing.prop = 'value')
RETURN *
Mais il semble toujours renvoyer la même chose que la première requête.
J'ai également essayé la compréhension de liste pour filtrer les relations.
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, [re in relationships(p) WHERE re.prop = 'value'] AS re
RETURN *
Mais je pense que cette approche présente quelques problèmes :
- relationships(p) semble être un tableau de tableaux en raison de la nature du graphique.
- il existe plusieurs types de relations dans les relations(p) (
RELA
etRELB
) et je ne suis pas sûr de savoir comment prendre cela en compte
Je ne trouve pas vraiment de documentation en ligne sur la manière de filtrer les relations lorsqu'elles sont renvoyées sous forme de liste (en raison de l'utilisation de l'option de filtrage de l'utilisateur). *
en [:RELB*]
)
Je dois aussi noter que la propriété que je dois filtrer RELB
on est un tableau et je vais vérifier s'il contient une valeur, donc je n'ai pas la possibilité d'utiliser quelque chose comme [:RELB*{prop: 'value'}]
dans la requête (je ne l'ai pas inclus ci-dessus pour ne pas compliquer la question)
Toute aide est appréciée.